首页 > 代码库 > POJ2777
POJ2777
http://poj.org/problem?id=2777
前几天看到一个大神说,要搞,就搞专题或者套题,我觉得现在这么菜的我,还是搞搞专题吧。
一道比较裸也比较基础的线段树的题目。
题意:就是有一段木头,可以对这个木头进行两种操作,一是进行涂色,而是进行查询,如果一个木头之前涂过色,那么之后涂色的话,会对之前的进行覆盖。
很明显的一个线段树的题目,不用线段树肯定超时的。
1 #include <stdio.h> 2 #include <string.h> 3 #define maxn 1000005 4 5 struct note{ 6 int l,r; 7 int col; 8 }Tegtree[ 3*maxn ]; 9 bool mark[40];10 11 void bulid(int root,int st,int en)12 {13 Tegtree[ root ].l = st;14 Tegtree[ root ].r = en;15 if(st == en) return ;16 int mid = ( Tegtree[ root ].l + Tegtree[ root ].r )>>1;17 bulid( root << 1 , st , mid );18 bulid( (root << 1) + 1 , mid + 1 , en );19 }20 21 void Update(int root,int x,int y,int colc)22 {23 if(Tegtree[ root ].l >= x && Tegtree[ root ].r <=y )24 {25 Tegtree[ root ].col = colc;26 return ;27 } else28 {29 if(Tegtree[root].col > 0) //进行延迟标记。30 {31 Tegtree[ root << 1 ].col = Tegtree[root].col;32 Tegtree[( root << 1 ) + 1 ].col = Tegtree[root].col;33 Tegtree[root].col = 0;34 }35 int mid = (Tegtree[ root ].l + Tegtree[ root ].r ) >> 1;36 if(x>mid){37 Update((root<<1)+1,x,y,colc);38 }else if(y<=mid){39 Update(root<<1,x,y,colc);40 }else {41 Update(root<<1,x,mid,colc);42 Update((root<<1)+1,mid+1,y,colc);43 }44 }45 }46 void Find(int root,int x,int y)47 {48 if(Tegtree[root].col > 0 )49 {50 mark[Tegtree[root].col] = true;51 }else{52 int mid = (Tegtree[ root ].l + Tegtree[ root ].r ) >> 1;53 if(x>mid){54 Find((root<<1)+1,x,y);55 }else if(y<=mid){56 Find(root<<1,x,y);57 }else {58 Find(root<<1,x,mid);59 Find((root<<1)+1,mid+1,y);60 }61 }62 }63 64 int main()65 {66 // freopen("in.txt","r",stdin);67 int l,t,o,a,b,c;68 char tmp[5];69 while(scanf("%d%d%d",&l,&t,&o)!=EOF)70 {71 Tegtree[1].col = 1;72 bulid(1,1,l);73 while(o--)74 {75 76 scanf("%s",tmp);77 // printf("%s\n",tmp);78 if(tmp[0]==‘C‘)79 {80 scanf("%d%d%d",&a,&b,&c);81 getchar();82 Update(1,a,b,c);83 }84 else if(tmp[0]==‘P‘)85 {86 scanf("%d%d",&a,&b);87 getchar();88 memset(mark,false,sizeof(mark));89 Find(1,a,b);90 int ans = 0;91 for(int i = 0 ; i <= 40 ; i++)92 if(mark[i]) ans++;93 printf("%d\n",ans);94 }95 }96 }97 return 0;98 }
POJ2777
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。