博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4931 Paint The Wall
阅读量:6801 次
发布时间:2019-06-26

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

题意: 有一个长度为 N 的墙,定义两种操作:

         1 a  b c  将 区间[a,b]涂成 c颜色

         2 a  b c 询问区间[a,b]中c颜色的的个数。

分析 : 区间合并类线段树。

#include
#include
#define clr(x)memset(x,0,sizeof(x))#define maxn 100005#define max(a,b)(a)>(b)?(a):(b)#define min(a,b)(a)<(b)?(a):(b)int hi[maxn<<2];int lo[maxn<<2];int col[maxn<<2];int add[maxn<<2];void creat(int l,int r,int rt){ if(l==r) { scanf("%d",&col[rt]); add[rt]=-1; hi[rt]=lo[rt]=col[rt]; return; } int mid=(l+r)>>1; creat(l,mid,rt<<1); creat(mid+1,r,rt<<1|1); if(add[rt<<1]==-1&&add[rt<<1|1]==-1&&col[rt<<1]==col[rt<<1|1]) { add[rt]=-1; col[rt]=col[rt<<1]; } else { add[rt]=0; col[rt]=-1; } hi[rt]=max(hi[rt<<1],hi[rt<<1|1]); lo[rt]=min(lo[rt<<1],lo[rt<<1|1]);}void update(int c,int L,int R,int l,int r,int rt){ if(L<=l&&r<=R) { add[rt]=-1; col[rt]=c; hi[rt]=lo[rt]=c; return; } if(add[rt]==-1) { add[rt<<1]=add[rt<<1|1]=add[rt]; col[rt<<1]=col[rt<<1|1]=col[rt]; hi[rt<<1]=hi[rt<<1|1]=col[rt]; lo[rt<<1]=lo[rt<<1|1]=col[rt]; add[rt]=0; } int mid=(l+r)>>1; if(L<=mid) update(c,L,R,l,mid,rt<<1); if(R>mid) update(c,L,R,mid+1,r,rt<<1|1); if(add[rt<<1]==-1&&add[rt<<1|1]==-1&&col[rt<<1]==col[rt<<1|1]) { add[rt]=-1; col[rt]=col[rt<<1]; } else { add[rt]=0; col[rt]=-1; } hi[rt]=max(hi[rt<<1],hi[rt<<1|1]); lo[rt]=min(lo[rt<<1],lo[rt<<1|1]);}int query(int c,int L,int R,int l,int r,int rt){ if(L<=l&&r<=R) { if(add[rt]==-1&&col[rt]==c) return (r-l+1); else if(c
hi[rt]) return 0; } if(add[rt]==-1) { add[rt<<1]=add[rt<<1|1]=add[rt]; col[rt<<1]=col[rt<<1|1]=col[rt]; hi[rt<<1]=hi[rt<<1|1]=col[rt]; lo[rt<<1]=lo[rt<<1|1]=col[rt]; add[rt]=0; } int mid=(l+r)>>1; int tot=0; if(L<=mid) tot+=query(c,L,R,l,mid,rt<<1); if(R>mid) tot+=query(c,L,R,mid+1,r,rt<<1|1); return tot;}int main(){ int n,m,op,a,b,c,res; while(scanf("%d%d",&n,&m)!=EOF) { creat(1,n,1); while(m--) { scanf("%d%d%d%d",&op,&a,&b,&c); if(op==1) update(c,a+1,b+1,1,n,1); else { res=query(c,a+1,b+1,1,n,1); printf("%d\n",res); } } } return 0;}

 

转载于:https://www.cnblogs.com/dream-wind/archive/2012/08/27/2659208.html

你可能感兴趣的文章
linux下常用命令
查看>>
canvas drag 实现拖拽拼图小游戏
查看>>
返回一个首尾相连的整数数组中最大子数组的和数
查看>>
线程安全和线程不安全的理解
查看>>
工厂方法模式(java,c++,objective-c)
查看>>
优秀的博文链接
查看>>
HBase-1.0.1学习笔记(一)集群搭建
查看>>
CentOS 6.4安装配置LNMP服务器(Nginx+PHP+MySQL)
查看>>
ChartPart图表显示
查看>>
web产品浏览器兼容性问题你有考虑到吗?
查看>>
内核同步之自旋锁与读写自旋锁
查看>>
spring如何集成hibernate
查看>>
【吾日三省吾身】2015.5.23-涅槃行动第五天
查看>>
LVM常见案例
查看>>
问题记录(持续更新)
查看>>
关于Java集合的小抄
查看>>
Python for 循环语句
查看>>
N12-数值的整次方
查看>>
mysql5.5复制环境中的一个bug
查看>>
CentOS6.5安装Tab增强版:bash-completion
查看>>