线段树--区间覆盖
来源:互联网 发布:牛头酋长wq二连优化 编辑:程序博客网 时间:2024/05/21 10:43
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#define maxn 100010typedef long long ll;using namespace std;int a[maxn],n,q;struct node{ int l,r,sum,tag;}tr[maxn*4];void build(int id,int l,int r);void change(int id,int ql,int qr,int lazyTag);int query(int id,int ql,int qr);void pushdown(int id);int main() { //freopen("in.txt","r",stdin); cin>>n; int i; for(i=1;i<=n;i++) cin>>a[i]; cin>>q; build(1,1,n); while(q--){ int o; cin>>o; if(o==0){ int a,b; cin>>a>>b; cout<<query(1,a,b)<<endl; } if(o==1){ int a,b,c; cin>>a>>b>>c; //cout<<a<<b<<endl; change(1,a,b,c); } } return 0;}void build(int id,int l,int r){ tr[id].l=l; tr[id].r=r; tr[id].tag=0; if(l==r){ tr[id].sum=a[l]; return; } int mid=(l+r)>>1; build(id<<1,l,mid); build(id<<1|1,mid+1,r); tr[id].sum=tr[id<<1].sum+tr[id<<1|1].sum;}void change(int id,int ql,int qr,int lazyTag){ int l=tr[id].l,r=tr[id].r; if(l>=ql&&r<=qr){ tr[id].sum=(r-l+1)*lazyTag; tr[id].tag=lazyTag; return; } pushdown(id); if(ql<=tr[id<<1].r) change(id<<1,ql,qr,lazyTag); if(qr>=tr[id<<1|1].l) change(id<<1|1,ql,qr,lazyTag); tr[id].sum=tr[id<<1].sum+tr[id<<1|1].sum;}int query(int id,int ql,int qr){ int l=tr[id].l,r=tr[id].r; if(ql<=l&&qr>=r){ return tr[id].sum; } pushdown(id); int mid=(l+r)/2; int p1=0,p2=0; if(ql<=mid) p1= query(id<<1,ql,qr); if(qr>mid) p2= query(id<<1|1,ql,qr); tr[id].sum=tr[id<<1].sum+tr[id<<1|1].sum; return p1+p2;}void pushdown(int id){ int l=tr[id].l,r=tr[id].r; if(tr[id].tag!=0){ int mid=(l+r)/2; tr[id<<1].sum=(mid-l+1)*tr[id].tag; tr[id<<1|1].sum=(r-mid)*tr[id].tag; tr[id<<1].tag=tr[id<<1|1].tag=tr[id].tag; tr[id].tag=0; }}
阅读全文
0 0
- 线段树--区间覆盖
- POJ2528 线段树区间覆盖
- 线段树 区间覆盖 区间增加
- Python 线段树求区间覆盖
- poj 2777 Count 线段树区间覆盖
- 线段树解决区间覆盖问题
- hdu3577-Fast Arrangement 线段树区间覆盖
- 线段区间覆盖代码
- POJ1436 Horizontally Visible Segments 线段树区间更新--区间覆盖
- Astar Round2B 1005 区间交 区间覆盖 线段树
- hdu 3397 Sequence operation(线段树区间覆盖,区间合并)
- HihoCoder 1078(线段树,区间覆盖 询问区间和)
- [主席树区间覆盖 线段树] UNR #1 火车管理
- POJ 1436 Horizontally VisibleSegments(线段树:区间覆盖染色)
- POJ 2777 Count Color(线段树:区间覆盖)
- poj3171(线段树区间覆盖最小代价)
- XTUOJ 区间覆盖总长(线段树+离散化)
- Codeforces 356A Knight Tournament线段树区间覆盖
- JS学习-变量作用域
- 微信小程序实现一个可以编辑单元格的表格
- js.for循环
- input框中按enter键会刷新页面
- springboot 多数据源问题
- 线段树--区间覆盖
- shell脚本实现msyql5.7全自动安装
- ScrollRect.verticalNormalizedPosition
- 利用数组结构实现大整数求和
- 前端面试经常问的问题
- Java版排序专题
- double转int问题
- 《信息系统项目管理师教程第二版》第一章:绪论
- RocketMQ存储篇——数据文件的访问入口(DefaultMessageStore)