正题

题目链接:https://www.luogu.com.cn/problem/CF444C


题目大意

nnn个物品第iii个颜色为iii,权值为000。要求支持mmm次操作

  1. 给出l,r,xl,r,xl,r,x,对于所有区间[l,r][l,r][l,r]中的物品,如果颜色为ccc,那么该位置的权值加上∣c−x∣|c-x|∣c−x∣,并且颜色改为xxx
  2. 询问区间权值和

解题思路

区间染色有一种简单的做法并且可以求出每个被染色的相同颜色段。

用setsetset维护每个相同的连续颜色段,那么每次修改最多会产生333个新的颜色端。均摊下来就是O(nlog⁡n)O(n\log n)O(nlogn)了。

然后加一个线段树维护权值就好了,总时间复杂度也是O(nlog⁡n)O(n\log n)O(nlogn)的


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#define ll long long
#define lowbit(x) (x&-x)
using namespace std;
const ll N=1e5+10;
struct node{ll l,r,w;node(ll L=0,ll rr=0,ll ww=0){l=L;r=rr;w=ww;return;}
};
multiset<node> s;
ll n,m;
bool operator<(node x,node y)
{return x.r<y.r;}
struct TreeBinary{ll w[N<<2],lazy[N<<2];void Downdata(ll x,ll l,ll r){if(!lazy[x])return;ll mid=(l+r)>>1;w[x*2]+=lazy[x]*(mid-l+1);w[x*2+1]+=lazy[x]*(r-mid);lazy[x*2]+=lazy[x];lazy[x*2+1]+=lazy[x];lazy[x]=0;return;}void Change(ll l,ll r,ll val,ll L=1,ll R=n,ll x=1){if(L==l&&R==r){w[x]+=val*(r-l+1);lazy[x]+=val;return;}ll mid=(L+R)>>1;Downdata(x,L,R); if(r<=mid)Change(l,r,val,L,mid,x*2);else if(l>mid)Change(l,r,val,mid+1,R,x*2+1);else Change(l,mid,val,L,mid,x*2),Change(mid+1,r,val,mid+1,R,x*2+1);w[x]=w[x*2]+w[x*2+1];return;}ll Ask(ll l,ll r,ll L=1,ll R=n,ll x=1){if(L==l&&R==r)return w[x];ll mid=(L+R)>>1;Downdata(x,L,R);if(r<=mid)return Ask(l,r,L,mid,x*2);if(l>mid)return Ask(l,r,mid+1,R,x*2+1);return Ask(l,mid,L,mid,x*2)+Ask(mid+1,r,mid+1,R,x*2+1); }
}T;
signed main()
{multiset<node>::iterator it;scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++)s.insert(node(i,i,i));while(m--){ll op,l,r,x;scanf("%lld%lld%lld",&op,&l,&r);if(op==1){scanf("%lld",&x); while(1){it=s.lower_bound(node(l,l,l));node tmp=*it;s.erase(it);if(tmp.l<l&&tmp.r>r)T.Change(l,r,abs(x-tmp.w));if(tmp.l<l){s.insert(node(tmp.l,l-1,tmp.w));if(tmp.r<=r)T.Change(l,tmp.r,abs(x-tmp.w));}if(tmp.r>r){s.insert(node(r+1,tmp.r,tmp.w));if(tmp.l>=l)T.Change(tmp.l,r,abs(x-tmp.w));break;}if(tmp.l>=l&&tmp.r<=r)T.Change(tmp.l,tmp.r,abs(x-tmp.w));if(tmp.r==r)break;}s.insert(node(l,r,x));}else printf("%lld\n",T.Ask(l,r));}return 0;
}

CF444C-DZY Loves Colors【线段树,set】相关推荐

  1. Codeforces 444C DZY Loves Colors 线段树区间更新

    // Codeforces 444C DZY Loves Colors 线段树区间更新// 题目链接:// http://codeforces.com/problemset/problem/444/C ...

  2. CodeForces - 444C DZY Loves Colors(线段树+剪枝)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数组 a 和计算贡献的数组 sum,需要执行 m 次操作,每次操作分为下列两种类型: 1 l r x:将区间 [ l , r ] 内的 a 用 x ...

  3. CodeForces 444 C DZY Loves Colors

    DZY Loves Colors 题意:有n个蛋糕,起初第i个蛋糕他的颜色值为i, 现在有2个操作, 1 x  y  c 在[x, y]的蛋糕上都加上一层颜色值为c的蛋糕片,加了这个蛋糕片之后,会产生 ...

  4. Codeforces 444 C - DZY Loves Colors

    C - DZY Loves Colors 思路: 分块,复杂度有点玄学,和普通分块不同的是在这个块被一次染色的时候暴力染整个块. 代码: #pragma GCC optimize(2) #pragma ...

  5. [Codeforces Round #254 div1] C.DZY Loves Colors 【线段树】

    题目链接:CF Round #254 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的 ...

  6. 2021牛客多校7 - xay loves monotonicity(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数字序列 aaa 和 010101 序列 bbb,需要执行 mmm 次操作,每次操作分为如下三种类型: 1 x y:修改 a[x]=ya[x]= ...

  7. 2021牛客暑期多校训练营7 xay loves monotonicity 线段树区间合并

    传送门 文章目录 题意: 思路: 题意: 题面挺绕口的,还是看原题比较好. 大概的意思就是让你从给定的区间中选择一个以左端点为起点的一个上升子序列,让后将这些下标存下来,在bbb中将这些位置拿出来后, ...

  8. 444 C DZY Loves Colors

    /*线段树,注意传递参数的写法*/ #include <cstdio> #include <algorithm> using namespace std;#define LL ...

  9. HDU - 5709 Claris Loves Painting 线段树动态开点+合并

    题目链接:https://cn.vjudge.net/problem/HDU-5709 题意:给定一棵n点的树,每个节点上有一个颜色,每次询问一个点的子树中与这个点距离不超过d的点的颜色有多少种 题解 ...

  10. Codeforces 444C DZY Loves colors(分块)

    我们维护一个标记表示区间内的数是否全相同即可. 如果全相同很容易算出 a , b a,b a,b 数组需要更新多少,打标记即可. 否则暴力修改. #include <map> #inclu ...

最新文章

  1. python自定义库文件路径
  2. 中国科学7月微生物组专刊:赵立平、秦楠、东秀珠领衔
  3. 你的画像是怎么来的?推荐系统是如何找到相似用户的?
  4. 影像时刻Image Moments
  5. C++实现successive approximation渐进法(附完整源码)
  6. [转] DevExpress 第三方控件汉化的全部代码和使用方法
  7. ShadeGraph教程之节点详解4:Master Nodes
  8. word排版案例报告_原来按下这个键,10秒EXCEL与Word格式就能互相转换,涨知识了...
  9. java 自定义异常处理
  10. 如何使用“启动转换”从 Mac 上移除 Windows?
  11. Emmet的简写演示
  12. 修改Linux文件格式为unix
  13. 电视剧《都挺好》弹幕数据分析
  14. 计算机画图软件技巧,CAD绘图技巧(一)—速度篇
  15. Win10_ltsc_2019_x64集成DPO基于人工智能优化可动态提高应用程序性能提升高达394%
  16. 诊断DB2 Java应用程序的性能问题
  17. 计算机左侧没有桌面菜单栏,AI软件左侧的工具栏不见了没有了怎么显示出来
  18. mysql 去除逗号,MySQL查询删除字符串中最后一个逗号后的所有字符?
  19. SEO解析:seo优化网站外链建设的方法! ! !
  20. 从不一样的角度描述Android事件传递,实战解析

热门文章

  1. 启动zookeeper_Giraph源码分析(一)—启动ZooKeeper服务
  2. android 栏目编辑,android – 编辑文本导致内存泄漏
  3. eeprom stm8l 擦除 读写_[STM8L]EEPROM操作读与写
  4. python中的成员运算符是干嘛的_在Python中使用成员运算符的示例
  5. [蓝桥杯2019初赛]迷宫-bfs+存储路径
  6. AcWing 503. 借教室
  7. Deque(双向队列 c++模版实现 算法导论第三版第十章10.1-5题)
  8. python二维散点分布图_深入理解皮尔逊相关系数amp;python代码
  9. icoding复习6 图
  10. Ubuntu 安装 cuda deb 指令 不要自动装9.2