CodeForces 444C 线段树
2024-10-21 05:42:13
想分块想了很久一点思路都没有,结果一看都是写的线段树= = 。。。完全忘记了还有线段树这种操作
题意:给一个数组,一种操作是改变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 ;
}
/******************** ********************/
最新文章
- cant create oci environment
- ";转"; CXF+JAXB处理复杂数据
- IOS主要框架介绍(转)
- android studio gradle升级
- 【CodeForces 621A】Wet Shark and Odd and Even
- LDA-math-神奇的Gamma函数
- Python基础教程之第2章 列表和元组
- jQuery经典面试题及答案精选[转载]
- C# DataTable转换成DataRow
- Jquery OR Js 实现图片预览
- linux程序自启动和新建linux服务的方法
- Windows上部署Redis
- ERROR 1130: Host xxx is not allowed to connect to this MySQL server
- __x__(17)0906第三天__块元素block_内联元素inline_行内块元素inline-block
- jQuery 新添加元素事件绑定无效
- 【LOJ】#2126. 「HAOI2015」数组游戏
- 【BZOJ4059】Non-boring sequences
- 201621123005《Java程序设计》第十三次实验总结
- ubuntu17.10 安装CUDA
- windows mobile ,wince 系统,用代码启动cab文件安装