设为首页 加入收藏

TOP

POJ 3468 A Simple Problem with Integers (伸展树区间更新求和操作 , 模板) (二)
2014-11-23 19:05:24 来源: 作者: 【 】 浏览:9
Tags:POJ 3468 Simple Problem with Integers 伸展 区间 更新 求和 操作 模板
ug(NODE *x) { if(x != null) { printf("节点: %2d 左儿子: %2d 右儿子: %2d size = %2d val = %2d\n", x->id, x->ch[0]->id, x->ch[1]->id, x->sz, x->val); debug(x->ch[0]); debug(x->ch[1]); } } int a[maxn]; NODE *newnode(NODE* f, int c) { NODE *x = &node[++top]; x->id = top; x->val = x->sum = c; x->ch[0] = x->ch[1] = null; x->sz = 1; x->add = 0; x->pre = f; return x; } void build(NODE* &x, int l, int r, NODE *f) { if(l > r) return ; int mid = (l+r)/2; x = newnode(f, a[mid]); build(lson, l, mid-1, x); build(rson, mid+1, r, x); x->push_up(); } void init(int n) { null->id = 0; null->ch[0] = null->ch[1] = NULL; null->sz = null->add = null->sum = null->val = 0; // null->pre = NULL; top = 0; root = newnode(null, -1); root->ch[1] = newnode(root, -1); for(int i = 0;i < n; i++) scanf("%d", &a[i]); build(keytree, 0, n-1, root->ch[1]); root->ch[1]->push_up(); root->push_up(); } void update() { int l, r, c; scanf("%d%d%d", &l, &r, &c); RotateTo(l-1, null); RotateTo(r+1, root); keytree->add += c; keytree->sum += (LL)c*keytree->sz; } void query() { int l, r; scanf("%d%d", &l, &r); RotateTo(l-1, null); RotateTo(r+1, root); printf("%I64d\n", keytree->sum); } }spt; int main() { int n, m; char s[2]; scanf("%d%d", &n, &m); spt.init(n); while(m--) { scanf("%s", s); if(s[0] == 'Q') spt.query(); else spt.update(); } return 0; }

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 3254 Corn Fields 下一篇HDU4628+状态压缩DP

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)