想分块想了很久一点思路都没有,结果一看都是写的线段树= = 。。。完全忘记了还有线段树这种操作

题意:给一个数组,一种操作是改变l到r为c,还有一种操作是查询l到r的总和差

线段树记得+lazy标记

#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 998244353
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=sqrt(N)+,inf=0x3f3f3f3f; ll color[N<<],lazy[N<<],sum[N<<];
bool same[N<<];
void changecolor(ll c,ll x,int l,int r,int rt)//x是改变的差值,c是上一个颜色
{
same[rt]=;
sum[rt]+=x*(r-l+);
color[rt]=c;
lazy[rt]+=x;
}
void pushup(int rt)
{
if(same[rt<<]&&same[rt<<|]&&color[rt<<]==color[rt<<|])
{
same[rt]=;
color[rt]=color[rt<<];
}
else same[rt]=;
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void pushdown(int l,int r,int rt)
{
if(lazy[rt])
{
int m=(l+r)>>;
changecolor(color[rt],lazy[rt],ls);
changecolor(color[rt],lazy[rt],rs);
lazy[rt]=;
}
}
void build(int l,int r,int rt)
{
if(l==r)
{
color[rt]=l;
same[rt]=;
sum[rt]=;
return ;
}
int m=(l+r)>>;
build(ls);
build(rs);
pushup(rt);
}
void update(int l,int r,int rt,int L,int R,ll x)
{
if(L<=l&&r<=R&&same[rt])
{
changecolor(x,abs(x-color[rt]),l,r,rt);
return ;
}
pushdown(l,r,rt);
int m=(l+r)>>;
if(L<=m)update(ls,L,R,x);
if(m<R)update(rs,L,R,x);
pushup(rt);
}
ll query(int l,int r,int rt,int L,int R)
{
if(L<=l&&r<=R)return sum[rt];
pushdown(l,r,rt);
int m=(l+r)>>;
ll ans=;
if(L<=m)ans+=query(ls,L,R);
if(m<R)ans+=query(rs,L,R);
return ans;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
build(,n,);
while(m--)
{
int x,y;
ll z;
scanf("%d",&x);
if(x==)
{
scanf("%d%d%lld",&x,&y,&z);
update(,n,,x,y,z);
}
else
{
scanf("%d%d",&x,&y);
printf("%lld\n",query(,n,,x,y));
}
}
return ;
}
/******************** ********************/

最新文章

  1. cant create oci environment
  2. &quot;转&quot; CXF+JAXB处理复杂数据
  3. IOS主要框架介绍(转)
  4. android studio gradle升级
  5. 【CodeForces 621A】Wet Shark and Odd and Even
  6. LDA-math-神奇的Gamma函数
  7. Python基础教程之第2章 列表和元组
  8. jQuery经典面试题及答案精选[转载]
  9. C# DataTable转换成DataRow
  10. Jquery OR Js 实现图片预览
  11. linux程序自启动和新建linux服务的方法
  12. Windows上部署Redis
  13. ERROR 1130: Host xxx is not allowed to connect to this MySQL server
  14. __x__(17)0906第三天__块元素block_内联元素inline_行内块元素inline-block
  15. jQuery 新添加元素事件绑定无效
  16. 【LOJ】#2126. 「HAOI2015」数组游戏
  17. 【BZOJ4059】Non-boring sequences
  18. 201621123005《Java程序设计》第十三次实验总结
  19. ubuntu17.10 安装CUDA
  20. windows mobile ,wince 系统,用代码启动cab文件安装

热门文章

  1. 使用QFuture类监控异步计算的结果
  2. 【22,23节】Django的GET和POST属性笔记
  3. javascript实例:点亮灯泡
  4. 【leetcode刷题笔记】Sudoku Solver
  5. 【Head First Servlets and JSP】笔记11:cookie
  6. Python编程-架构、Socket
  7. python的常用的内置函数
  8. PHP类的变量与成员,及其继承、访问与重写要注意的问题
  9. 23种设计模式UML表示形式
  10. Tomcat8内置jdk8运行环境发布web项目