博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018.07.23 codeforces 438D. The Child and Sequence(线段树)
阅读量:5252 次
发布时间:2019-06-14

本文共 1861 字,大约阅读时间需要 6 分钟。

线段树维护区间取模,单点修改,区间求和。
这题老套路了,对一个数来说,每次取模至少让它减少一半,这样每次单点修改对时间复杂度的贡献就是一个loglog,所以维护区间最大值剪枝,然后每次单点暴力取模,这样的话时间复杂度为OnlognO(nlogn)
代码如下:

#include
#define lc (p<<1)#define rc (p<<1|1)#define mid (T[p].l+T[p].r>>1)#define N 100005#define ll long longusing namespace std;inline ll read(){ ll ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar(); return ans;}inline void write(ll x){ if(x>9)write(x/10); putchar((x%10)^48);}ll n,m,a[N];struct Node{ll l,r,sum,maxn;}T[N<<2];inline ll max(ll a,ll b){
return a>b?a:b;}inline void pushup(ll p){
T[p].sum=T[lc].sum+T[rc].sum,T[p].maxn=max(T[lc].maxn,T[rc].maxn);}inline void build(ll p,ll l,ll r){ T[p].l=l,T[p].r=r; if(l==r){
T[p].sum=T[p].maxn=a[l];return;} build(lc,l,mid),build(rc,mid+1,r),pushup(p);}inline void update(ll p,ll k,ll v){ if(T[p].l==T[p].r){
T[p].maxn=T[p].sum=v;return;} if(k<=mid)update(lc,k,v); else update(rc,k,v); pushup(p);}inline void modify(ll p,ll ql,ll qr,ll v){ if(ql>T[p].r||qr
T[p].maxn)return; if(T[p].l==T[p].r){
T[p].sum=T[p].maxn=T[p].sum%v;return;} if(qr<=mid)modify(lc,ql,qr,v); else if(ql>mid)modify(rc,ql,qr,v); else modify(lc,ql,mid,v),modify(rc,mid+1,qr,v); pushup(p);}inline ll query(ll p,ll ql,ll qr){ if(ql>T[p].r||qr
mid)return query(rc,ql,qr); return query(lc,ql,mid)+query(rc,mid+1,qr);}int main(){ n=read(),m=read(); for(ll i=1;i<=n;++i)a[i]=read(); build(1,1,n); while(m--){ ll op=read(),a=read(),b=read(); switch(op){ case 1:{write(query(1,a,b)),puts("");break;} case 2:{ll v=read();modify(1,a,b,v);break;} default:{update(1,a,b);break;} } } return 0;}

转载于:https://www.cnblogs.com/ldxcaicai/p/9738420.html

你可能感兴趣的文章
C# 非托管内存使用时的注意事项
查看>>
转负二进制
查看>>
算法训练 6-1 递归求二项式系数值
查看>>
coursera—吴恩达Machine Learning笔记(4-6周)
查看>>
2.无法从用法中推导出方法System.Data.Linq.Table.InsertAllOnSubmit...
查看>>
redis启动.停止.重启
查看>>
Jquery detect page refresh
查看>>
AE中如何利用二维点生3D树状图
查看>>
vue中,将a变量赋值给b变量,修改a变量,会影响到b变量。vue缓存重置问题
查看>>
day3课程笔记
查看>>
关于eclipse内置的tomcat不能识别自己指定的资源路径properties文件的问题
查看>>
jpa w/ spring
查看>>
软件151 刘光星
查看>>
【一天又一天】
查看>>
js 获取当前日期时间3种格式化方法 yyyy-mm-dd hh:MM:ss
查看>>
C#winform中Excel电子表格导入数据库示例
查看>>
面向对象——对象的使用
查看>>
javascript parseUrl函数(来自国外的获取网址url参数)
查看>>
C#基础精华08(反射,程序集)
查看>>
javascript基础:window对象内置对话框、模式和非模式对话框、传值方法
查看>>