codeforces 438D(线段树)
来源:互联网 发布:四维单子数据看男女 编辑:程序博客网 时间:2024/06/02 02:24
传送门
几乎是线段树模板题,只需进行剪枝:对于区间最大值大于模数的区间才进行模运算。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cstdlib>#define root 1,1,n#define lson rt<<1,l,mid#define rson rt<<1|1,mid+1,rusing namespace std;typedef long long ll;const int maxn=1e5+2;int n,m;ll sum[maxn<<2],maxx[maxn<<2];inline int read() { int x=0;char c=getchar(); while (c<'0'||c>'9') c=getchar(); while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x;}inline void pushup(int rt) { sum[rt]=sum[rt<<1]+sum[rt<<1|1]; maxx[rt]=max(maxx[rt<<1],maxx[rt<<1|1]);}void build(int rt,int l,int r) { if (l==r) { sum[rt]=maxx[rt]=(ll)read(); return ; } int mid=(l+r)>>1; build(lson), build(rson); pushup(rt);}ll query(int rt,int l,int r,int L,int R) { if (L<=l&&r<=R) return sum[rt]; int mid=(l+r)>>1; ll ans=0; if (L<=mid) ans+=query(lson,L,R); if (mid<R) ans+=query(rson,L,R); return ans;}void modify(int rt,int l,int r,int L,int R,ll val) { if (maxx[rt]<val) return ; if (l==r) { maxx[rt]%=val, sum[rt]%=val; return ; } int mid=(l+r)>>1; if (L<=mid) modify(lson,L,R,val); if (mid<R) modify(rson,L,R,val); pushup(rt);}void update(int rt,int l,int r,int pos,ll val) { if (l==r) { maxx[rt]=sum[rt]=val; return ; } int mid=(l+r)>>1; if (pos<=mid) update(lson,pos,val); else update(rson,pos,val); pushup(rt);}int main() {// freopen("codeforces 438D.in","r",stdin); while (~scanf("%d%d",&n,&m)) { build(root); while (m--) { int which=read(),L,R,pos,val; switch (which) { case 1:L=read(),R=read(),printf("%lld\n",query(root,L,R));break; case 2:L=read(),R=read(),val=read(),modify(root,L,R,(ll)val);break; case 3:pos=read(),val=read(),update(root,pos,(ll)val);break; } } } return 0;}
阅读全文
0 0
- codeforces 438D(线段树)
- Codeforces 438D 线段树 解题报告
- codeforces 339d(线段树)
- codeforces 19D 线段树
- CodeForces 438D 浅谈区间取模线段树
- CodeForces 438D 线段树区间取模
- codeforces 339 D.Xenia and Bit Operations(线段树)
- Codeforces 165D Buses and People(线段树)
- Codeforces Beta Round #12 D. Ball (线段树)
- Codeforces 19 D. Points(线段树&set好题)
- 线段树(good)Codeforces Round #275 (Div. 2)D
- 【CodeForces】 19D Points(线段树|单点更新)
- Codeforces 193 D. Two Segments(线段树)
- CodeForces 228D. Zigzag(线段树暴力)
- CodeForces 46D Parking Pot(线段树区间更新)
- CodeForces 46D Parking Lot(线段树区间合并)
- codeforces 19D(线段树的应用)
- Codeforces Round #352 div1 C D (智商+线段树)
- ZOJ 1091 依然是广搜哒~~
- A+B for Input-Output Practice (VII)
- 通过pxe进行系统安装
- 【HDU-1205】吃糖果
- Java高级特性之---内部类
- codeforces 438D(线段树)
- 17暑假多校联赛1.6 HDU 6038 Function
- linux高可用集群HA之pacemaker
- 内存分配方式
- 异步的终极解决方案-ES7的Async/Await
- Relatives---欧拉函数
- 一切都好就是404
- Matlab_回归分析_逐步回归
- map<int,int>::iterator it 的用法