hdu 5023 线段树延迟更新+状态压缩
来源:互联网 发布:在线支付php源码 编辑:程序博客网 时间:2024/06/12 20:02
/*线段树延迟更新+状态压缩*/#include<stdio.h>#define N 1100000struct node { int x,y,yanchi,sum;}a[N*4];int lower[31];void build(int t,int x,int y) {a[t].x=x;a[t].y=y;a[t].yanchi=0;if(x==y){ a[t].sum=lower[1]; return ;}int temp=t<<1;int mid=(x+y)/2;build(temp,x,mid);build(temp+1,mid+1,y);a[t].sum=a[temp].sum|a[temp+1].sum;}void inset(int t,int x,int y,int c) { //printf("%d %d %d\n",a[t].yanchi,a[t].x,a[t].y); if(a[t].x==x&&a[t].y==y) { a[t].yanchi=lower[c]; a[t].sum=lower[c];//sum和yanchi都需要改变 // printf("%d %d %d\n",x,y,lower[c]); return ; } int temp=t*2; int mid=(a[t].x+a[t].y)/2; if(a[t].yanchi) {//如果区间a[t].x--a[t].y被操作过就赋给子区间 a[temp].yanchi=a[t].yanchi; a[temp].sum=a[t].sum; a[temp+1].yanchi=a[t].yanchi; a[temp+1].sum=a[t].sum; a[t].yanchi=0; } if(x>mid)inset(temp+1,x,y,c); else if(y<=mid)inset(temp,x,y,c); else { inset(temp,x,mid,c); inset(temp+1,mid+1,y,c); } a[t].sum=a[temp].sum|a[temp+1].sum; return ;}int qury(int t,int x,int y) { // printf("%d %d %d\n",a[t].yanchi,a[t].x,a[t].y); if(a[t].x==x&&a[t].y==y) { // printf("%d\n",a[t].sum); return a[t].sum; } int temp=t*2; int mid=(a[t].x+a[t].y)/2; if(a[t].yanchi) {//如果区间a[t].x--a[t].y被操作过就赋给子区间 a[temp].yanchi=a[t].yanchi; a[temp].sum=a[t].sum; a[temp+1].yanchi=a[t].yanchi; a[temp+1].sum=a[t].sum; a[t].yanchi=0; } if(x>mid) return qury(temp+1,x,y); else if(y<=mid) return qury(temp,x,y); else return qury(temp,x,mid)|qury(temp+1,mid+1,y); a[t].sum=a[temp+1].sum|a[temp].sum;//更新}int main() { int n,m,i,j,k,ans; char s[10]; lower[0]=1; for(i=1;i<=30;i++) lower[i]=lower[i-1]*2; while(scanf("%d%d",&n,&m),n||m) { build(1,1,n); while(m--) { scanf("%s",s); if(s[0]=='P') { scanf("%d%d%d",&i,&j,&k); inset(1,i,j,k-1); } if(s[0]=='Q') { scanf("%d%d",&i,&j); ans=qury(1,i,j); // printf("%d\n",ans); k=0; for(i=0;i<30;i++) if(ans&lower[i]) { if(k) printf(" "); printf("%d",i+1); k=1; } printf("\n"); } } }return 0;}
0 0
- hdu 5023 线段树延迟更新+状态压缩
- HDU 5023 - A Corrupt Mayor's Performance Art(线段树区间更新+状态压缩)
- 【线段树延迟更新】HDU 3275
- poj2777 Count Color线段树延迟更新,二进制状态记录
- HDU 5023(区间更新/状态压缩)
- hdu 1556 线段树区间延迟更新好题
- HDU 1698 Just a Hook(线段树延迟更新)
- hdu3954 线段树延迟更新
- POJ3468(线段树+延迟更新)
- poj4047(线段树+延迟更新)
- poj2777(延迟更新+线段树)
- 【HDU 5023】A Corrupt Mayor's Performance Art 【线段树+状态压缩】
- HDU 2871 Memory Control(线段树区间更新,延迟更新+vector+二分)
- poj2777线段树,状态压缩
- 九度1407(线段树+延迟更新)
- poj 3468线段树延迟更新
- 线段树区间更新延迟标记
- poj3468 线段树+延迟更新
- XSS Funny Vector Review
- App.Config详解及读写操作
- 常见正则表达式
- CXF学习-WSDL文档深入了解
- 问题12:如何利用oracle bbed 来模拟破坏数据块,并且用RMAN进行恢复?
- hdu 5023 线段树延迟更新+状态压缩
- 最舒服的十种颜色
- php ci框架之controller
- Windows任务栏空白图标的解决方案
- 仿函数
- 2014 ACM/ICPC Asia Regional Guangzhou Online
- Web server echo benchmark
- Java之集合类应用总结
- iOS 沙盒(SandBox)