poj-2777-线段树
来源:互联网 发布:微信裂变红包源码 编辑:程序博客网 时间:2024/05/05 03:41
被线段树虐死了。。。
大体题意:
有一块板子,上面的颜色都为1.然后给你以下操作:
C A B C 把A-B染成C
P A B 询问A-B有几种颜色。
做法:
区域更新线段树。
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;#define maxn 100010struct list{ int a,b; int ct; int color;}node[maxn*4];int n,t,o;int ans;int cnum[31];void creat(int l,int r,int num){ node[num].a=l; node[num].b=r; node[num].color=(1<<1); node[num].ct=0; int mid; mid=(l+r)/2; if(r-l>=1) { creat(l,mid,num*2); creat(mid+1,r,num*2+1); }}void insert(int l,int r,int c,int num){ int a=node[num].a; int b=node[num].b; if(l==a&&r==b) { node[num].color=cnum[c]; node[num].ct=c; return ; } int mid=(a+b)/2; if(node[num].ct!=0) { node[num*2 ].ct=node[num].ct; node[num*2 ].color=node[num].color; node[num*2+1].ct=node[num].ct; node[num*2+1].color=node[num].color; node[num].ct=0; } if(mid>=r) { insert(l,r,c,num*2); } else if(mid<l) { insert(l,r,c,num*2+1); } else { insert(l,mid,c,num*2); insert(mid+1,r,c,num*2+1); } node[num].color=node[num*2].color|node[num*2+1].color;}void search(int l,int r,int num){ int a,b,mid; a=node[num].a; b=node[num].b; mid=(a+b)/2; if(l<=node[num].a&&r>=node[num].b) { ans=ans|node[num].color; return ; } else if((l>=node[num].a&&r<=node[num].b)&&node[num].ct!=0) { ans=ans|node[num].color; return ; } if(mid>=r) { search(l,r,num*2); } else if(mid<l) { search(l,r,num*2+1); } else { search(l,mid,num*2); search(mid+1,r,num*2+1); }}int dos(int x){ int ns=0,i; for(i=1;i<=30;i++) { if((x&(1<<i))!=0)ns++; } return ns;}int main(){ int i; for(i=1;i<=30;i++) { cnum[i]=(1<<i); } while(scanf("%d%d%d",&n,&t,&o)!=EOF) { creat(1,n,1); getchar(); int a,b,c; char ord; while(o--) { scanf("%c",&ord); if(ord=='C') { scanf("%d%d%d%*c",&a,&b,&c); if(a>b)swap(a,b); insert(a,b,c,1); } else if(ord=='P') { scanf("%d%d%*c",&a,&b); if(a>b)swap(a,b); ans=0; search(a,b,1); printf("%d\n",dos(ans)); } } } return 0;}
- POJ 2777 线段树
- POJ 2777 (线段树)
- POJ 2777 (线段树)
- poj 2777 线段树
- poj-2777-线段树
- 线段树。。。POJ 2777
- POJ 2777 线段树
- POJ 2777 线段树
- POJ 2777 线段树
- POJ 2777 线段树
- POJ 2777 线段树
- POJ 2777 线段树
- poj 2777(线段树)
- 线段树之poj 2777
- poj 2777(线段树)
- POj 2777(线段树)
- POJ 2777 线段树 线段染色 基础题
- POJ 2777 Count Color 线段树
- Oracle 计算两个时间的差值
- JavaWeb之概述
- 『黑马程序员』java基础(环境设置,基础语法,函数数组)
- boost线程问题
- SAX解析
- poj-2777-线段树
- Pull解析完成XML文档的输出
- 面试前夕
- laplace变换 ----边缘检测
- iOS开发 delegate、 SEL和Block
- JSON数据解析
- 【zz】部署一个简单的servlet工程(测试)
- 复杂JSON输出数据
- GraphEdit使用