博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【洛谷P1558】色板游戏
阅读量:5105 次
发布时间:2019-06-13

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

线段树+状压

在线段树上维护一个值表示这个区间的颜色,具体地讲,我们将这个区间的颜色进行状压,第1种颜色对应状压后的第1位,以此类推。这样我们维护的这个数就是状压之后的数,在合并区间时将两个数按位或即可,区间取值直接覆盖即可,最后我们统计答案时只需统计这个数有多少个1即可。

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 typedef long long ll; 7 int sum[100010<<2],tag[100010<<2],n,m,t; 8 inline int read() { 9 int ret=0;10 int op=1;11 char c=getchar();12 while(c<'0'||c>'9') {
if(c=='-') op=-1; c=getchar();}13 while(c<='9'&&c>='0') ret=ret*10+c-'0',c=getchar();14 return ret*op;15 }16 inline void pushup(int now) {17 sum[now]=sum[now<<1]|sum[now<<1|1];18 }19 inline void pushdown(int now) {20 if(tag[now]) {21 tag[now<<1]=tag[now<<1|1]=tag[now];22 sum[now<<1]=sum[now<<1|1]=1<
>1;32 build(now<<1,l,mid);33 build(now<<1|1,mid+1,r);34 pushup(now);35 }36 void updata(int now,int l,int r,int x,int y,int val) {37 if(x<=l&&r<=y) {38 tag[now]=val;39 sum[now]=1<
>1;44 if(x<=mid) updata(now<<1,l,mid,x,y,val);45 if(y>mid) updata(now<<1|1,mid+1,r,x,y,val);46 pushup(now);47 }48 int query(int now,int l,int r,int x,int y) {49 if(x<=l&&r<=y) return sum[now];50 pushdown(now);51 int mid=l+r>>1;52 int ret=0;53 if(x<=mid) ret|=query(now<<1,l,mid,x,y);54 if(y>mid) ret|=query(now<<1|1,mid+1,r,x,y);55 return ret;56 }57 int main() {58 n=read(); m=read(); t=read();59 build(1,1,n);60 while(t--) {61 int x,y,z;62 char op;63 cin>>op>>x>>y;64 if(op=='C') {65 cin>>z;66 if(x>y) swap(x,y);67 updata(1,1,n,x,y,z);68 }69 else {70 if(x>y) swap(x,y);71 int ret=query(1,1,n,x,y);72 int ans=0;73 for(int i=1;i<=m;i++)74 if(ret&(1<
AC Code

 

转载于:https://www.cnblogs.com/shl-blog/p/10925389.html

你可能感兴趣的文章
POJ 2528 线段树 + 离散化
查看>>
python数据分析-05DataFrame深入
查看>>
【转】Java学习---Java核心数据结构(List,Map,Set)使用技巧与优化
查看>>
理解Java中的弱引用(Weak Reference)
查看>>
lamp
查看>>
linux 各级目录的作用
查看>>
2015年8月TIOBE编程语言排行榜
查看>>
打印九九乘法表,左下角、右上角、左上角、右下角,使用列表推导式
查看>>
文章学习记录
查看>>
Illegal access: this web application instance has been stopped already. Could not load com.taobao.g
查看>>
javascript中文版教程(转自 幸福清扬)
查看>>
HTML5 SVG
查看>>
eclipse for mac 快捷键
查看>>
【Demo 0075】获取系统进程列表
查看>>
嵌入式系统C编程之堆栈回溯(二)
查看>>
如何修改config?
查看>>
什么是CPU平均负载
查看>>
面试常问题
查看>>
解析LayoutSubviews
查看>>
Scriptable Render Pipeline
查看>>