CF445E:DZY Loves Colors(线段树区间更新)^
来源:互联网 发布:二战德国知乎 编辑:程序博客网 时间:2024/06/05 18:10
题意:N个点初始贡献为0,颜色为i,M个操作:1是将区间内的颜色变成val,且每个点的贡献为abs(x-val)。2是求出区间内每个数的历史贡献之和。
思路:线段树区间更新,区间内的颜色不一样怎么办呢?col[]数组储存区间内颜色是否一样,一样才更新lazy之类的,否则继续往下递归。
# include <bits/stdc++.h># define lson l,m,id<<1# define rson m+1,r,id<<1|1using namespace std;typedef long long LL;const int maxn = 1e5+30;LL col[maxn<<2], sum[maxn<<2], lazy[maxn<<2];void build(int l, int r, int id){ if(l==r) { col[id] = l; return; } int m = l+r>>1; build(lson); build(rson); sum[id] = sum[id<<1] + sum[id<<1|1]; if(col[id<<1] && col[id<<1]==col[id<<1|1]) col[id] = col[id<<1]; else col[id] = 0;}void pushdown(int rt, int dis){ if(lazy[rt]) { lazy[rt<<1] += lazy[rt]; lazy[rt<<1|1] += lazy[rt]; col[rt<<1] = col[rt<<1|1] = col[rt]; sum[rt << 1] += lazy[rt]*(dis-(dis>>1)); sum[rt<<1|1] += lazy[rt]*(dis>>1); lazy[rt] = 0; }}void update(int L, int R, int val, int l, int r, int id){ if(L<=l && R>=r && col[id]) { lazy[id] += abs(col[id]-val); sum[id] += (LL)llabs(val-col[id])*(r-l+1); col[id] = val; return; } pushdown(id, r-l+1); int m = l+r>>1; if(L <= m) update(L, R, val, lson); if(R > m) update(L, R, val, rson); sum[id] = sum[id<<1] + sum[id<<1|1]; if(col[id<<1] && col[id<<1]==col[id<<1|1]) col[id] = col[id<<1]; else col[id] = 0;}LL query(int L, int R, int l, int r, int id){ if(L<=l && R>=r) return sum[id]; pushdown(id, r-l+1); LL ans = 0; int m = l+r>>1; if(L <= m) ans += query(L, R, lson); if(R > m) ans += query(L, R, rson); return ans;}int main(){ int n, m; scanf("%d%d",&n,&m); build(1, n, 1); while(m--) { int op, l, r, x; scanf("%d%d%d",&op,&l,&r); if(op == 1) { scanf("%d",&x); update(l,r,x,1,n,1); } else printf("%I64d\n",query(l,r,1,n,1)); } return 0;}
阅读全文
0 0
- CF445E:DZY Loves Colors(线段树区间更新)^
- Codeforces 444C DZY Loves Colors 线段树区间更新
- Cf 444C DZY Loves Colors(线段树)
- CodeForces 444C - DZY Loves Colors(线段树)
- codeforces 444C. DZY Loves Colors (线段树)
- Codeforces Round #254 (Div. 2) E. DZY Loves Colors(线段树 成段更新)
- 【CodeForces】444C DZY Loves Colors 线段树
- 【线段树】 codeforces 444C DZY Loves Colors
- codeforces 444 C. DZY Loves Colors(线段树)
- Codeforces 444C DZY Loves Colors(线段树)
- codeforces 444C DZY Loves Colors 线段树乱搞
- Codeforces 444C DZY Loves Colors 线段树
- Codeforces 444C DZY Loves Colors 线段树
- codeforces 444C DZY Loves Colors(线段树)
- Codeforces #257 div2 E DZY Loves Colors 线段树优化
- Codeforces 444C DZY Loves Colors(线段树)
- ZOJ 1610 Count the Colors(线段树区间更新)
- ZOJ1610 Count the Colors(线段树区间更新)
- 求斐波那契数列的多种方法(有矩阵(附好模板))
- 代码在线自动生成工具,在线生成java代码,springmvc框架,mapper,实体类,控制器,页面代码
- 勾股数
- 深度理解链式前向星
- 【简单学】字体设置
- CF445E:DZY Loves Colors(线段树区间更新)^
- HDU-1159-Common Subsequence
- mysql 注释符号
- iOS日历、日期、时间的计算
- mybait中的log4j配置
- Java版-九大排序算法
- 一个线程安全的计数器实现(java),可以让一个变量每天从1开始递增
- HDU3625 第一类斯特林数
- debian将用户添加到sudoers