【JZOJ4603】颜料大乱斗
来源:互联网 发布:手机弹电子琴软件 编辑:程序博客网 时间:2024/04/25 22:39
Description
Solution
辣鸡题目!!!
(这里就不骂辣鸡出题人了)
这题查询和修改区间(l,r) 竟然l 可以大于r !!
而且白色是颜料1!!!!
注意上面那些细节,开30颗线段树就可以AC了。
Code
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#define fo(i,j,k) for(int i=j;i<=k;i++)#define fd(i,j,k) for(int i=j;i>=k;i--)#define N 100001using namespace std;bool tr[N*4][31];int g[N*4];int a[N];bool bz[31];int n,c,m;void put(int v,int l,int r){ if(!g[v]) return; fo(i,1,c) tr[v*2][i]=tr[v*2+1][i]=0; tr[v*2][g[v]]=1; tr[v*2+1][g[v]]=1; g[v*2]=g[v*2+1]=g[v]; g[v]=0;}void build(int v,int l,int r){ if(l==r) { tr[v][1]=1; g[v]=0; return; } int mid=(l+r)/2; build(v*2,l,mid); build(v*2+1,mid+1,r); tr[v][1]=tr[v*2][1]|tr[v*2+1][1]; g[v]=0;}void change(int v,int l,int r,int x,int y,int t){ if(l==x && r==y) { g[v]=t; fo(i,1,c) tr[v][i]=0; tr[v][t]=1; return; } put(v,l,r); int mid=(l+r)/2; if(y<=mid) change(v*2,l,mid,x,y,t); else if(x>mid) change(v*2+1,mid+1,r,x,y,t); else { change(v*2,l,mid,x,mid,t); change(v*2+1,mid+1,r,mid+1,y,t); } fo(i,1,c) tr[v][i]=tr[v*2][i]|tr[v*2+1][i];}int ans=0;void find(int v,int l,int r,int x,int y){ if(l==x && r==y) { fo(i,1,c) if(tr[v][i] && !bz[i]) bz[i]=true,ans++; return; } put(v,l,r); int mid=(l+r)/2; if(y<=mid) find(v*2,l,mid,x,y); else if(x>mid) find(v*2+1,mid+1,r,x,y); else { find(v*2,l,mid,x,mid); find(v*2+1,mid+1,r,mid+1,y); }}int main(){ cin>>n>>c>>m; build(1,1,n); while(m--) { char ch[3]; int l,r; scanf("%s %d %d",ch,&l,&r); if(l>r) swap(l,r); if(ch[0]=='C') { int t; scanf("%d",&t); change(1,1,n,l,r,t); } else { memset(bz,0,sizeof(bz)); ans=0; find(1,1,n,l,r); if(!ans) ans++; printf("%d\n",ans); } }}
0 0
- 【JZOJ4603】颜料大乱斗
- [JZOJ4603] 颜料大乱斗
- Jzoj4603 颜料大乱斗
- 【jzoj4603】【颜料大乱斗】【线段树】
- [jzoj4603]【NOIP2016提高A组模拟7.15】颜料大乱斗
- 【JZOJ 4603】颜料大乱斗
- 【JZOJ 4603】颜料大乱斗
- 【NOIP模拟】颜料大乱斗
- 【NOIP2016提高A组模拟7.15】颜料大乱斗 题解+代码
- JZOJ 4603 颜料大乱斗【NOIP2016提高A组模拟7.15】
- 颜料大乱斗【NOIP2016提高A组模拟7.15】
- 【NOIP2016提高A组模拟7.15】颜料大乱斗
- 最少颜料
- 混合颜料
- 混合颜料
- 混合颜料
- 混合颜料
- 怎么洗掉衣服上的水粉颜料、丙烯颜料、水彩颜料、油画颜料
- 260. Single Number III
- 7. 装饰者模式--如何不同风格打扮自己
- webservice的简单demo(基于Java)
- 在Linux上安装Memcached服务
- Python - Decorator
- 【JZOJ4603】颜料大乱斗
- 筛素数
- Android 微博头条头部滑动的效果
- 具有负边值的赋权最短路算法
- 一款高效的程序员画图软件推荐
- 链表相交判断
- 503 Service Unavailable
- 服务器集群搭建
- Java NIO 学习(五)--DataGramChannel