博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu4578线段树区间更新
阅读量:4582 次
发布时间:2019-06-09

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

/*只有在区间中的数字不相同时才pushdown:往子区间传递数字再到子区间更新,同时该区间的flag置0更新完左右子区间后进行pushup,如果左右子区间数字相同,那么把子区间合并,子区间数字置0*/#include
#include
#include
using namespace std;#define ll long long #define mod 10007#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define maxn 200000int n,q,flag[maxn<<2],x[maxn<<2];inline void pushup(int rt){ if(!flag[rt<<1] || !flag[rt<<1|1]) flag[rt]=0; else if(x[rt<<1]!=x[rt<<1|1]) flag[rt]=0; else flag[rt]=1,x[rt]=x[rt<<1];}inline void pushdown(int rt){ if(flag[rt]){ flag[rt<<1]=flag[rt<<1|1]=1; x[rt<<1]=x[rt]; x[rt<<1|1]=x[rt]; flag[rt]=0; }}void update(int L,int R,int op,int val,int l,int r,int rt){ if(L<=l && R>=r && flag[rt]){ if(op==1) x[rt]=(x[rt]+val)%mod; else if(op==2) x[rt]=x[rt]*val%mod; else x[rt]=val; return; } pushdown(rt); int m=l+r>>1; if(L<=m) update(L,R,op,val,lson); if(R>m) update(L,R,op,val,rson); pushup(rt);}ll query(int L,int R,int val,int l,int r,int rt){ if(L<=l && R>=r && flag[rt]){ ll ans=1; for(int i=1;i<=val;i++) ans=(ans*x[rt])%mod; ans=(ans*(r-l+1))%mod; return ans; } pushdown(rt); int m=l+r>>1; ll ans=0; if(L<=m) ans+=query(L,R,val,lson); if(R>m) ans+=query(L,R,val,rson); return ans%mod;}int main(){ while(scanf("%d%d",&n,&q),n){ memset(flag,1,sizeof flag); memset(x,0,sizeof x); int op,L,R,val; while(q--){ scanf("%d%d%d%d",&op,&L,&R,&val); if(op<=3 && op>=1) update(L,R,op,val,1,n,1); else printf("%lld\n",query(L,R,val,1,n,1)); } } return 0;}

 

转载于:https://www.cnblogs.com/zsben991126/p/9958450.html

你可能感兴趣的文章
tomcat
查看>>
MUI开发注意事项
查看>>
elasticsearch摸石头过河——常用数据类型(二)
查看>>
scrum立会报告+燃尽图(第三周第三次)
查看>>
[SQL] 获取 Microsoft SQL Server 2008 的数据表结构
查看>>
iOS进度指示器——NSProgress
查看>>
C语言strcat,ctrcpy函数原型和改进
查看>>
good bye 2015 B - New Year and Old Property
查看>>
(第4篇)hadoop之魂--mapreduce计算框架,让收集的数据产生价值
查看>>
万年历-农历-农历日期
查看>>
如何辞职
查看>>
SSO 单点登录总结(PHP)
查看>>
Ubuntu16.04下将hadoop2.7.3源代码导入到eclipse neon中
查看>>
朝令夕改的企业不值得留恋
查看>>
springboot踩坑出坑记
查看>>
ovs源码阅读--netlink使用
查看>>
php中引用&的真正理解-变量引用、函数引用、对象引用
查看>>
cmake编译安装mysql 5.6.12
查看>>
第七章学习小结
查看>>
GS LiveMgr心跳管理类
查看>>