码迷,mamicode.com
首页 > 其他好文 > 详细

2014 网选 广州赛区 hdu 5023 A Corrupt Mayor's Performance Art

时间:2014-09-21 05:19:00      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   for   2014   div   

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #define N 1000005
 6 using namespace std;
 7 
 8 int c[35];
 9 int tree[N*4];//正值表示该节点所管理的区间的颜色是纯色,-1表示的是非纯色
10 int n, m; 
11 
12 void buildT(int ld, int rd, int p){
13     if(ld <= rd){
14         tree[p] = 2;//初始每一个节点的颜色全部都是2
15         if(ld == rd) return;
16         int mid=(ld + rd)>>1;
17         buildT(ld, mid, p<<1);
18         buildT(mid+1, rd, p<<1|1);
19     }
20 }
21 
22 void updateT(int ld, int rd, int a, int b, int col, int p){
23     
24     if(ld > rd) return ;
25     
26     if(tree[p] == col) return ;
27     
28     if(ld == a && rd == b){
29         tree[p] = col;
30         return ;
31     }
32     int mid = (ld + rd)>>1;
33     
34     if(tree[p] != -1){// p所管的区间之前是纯色,现在不是纯色了,向下更新其孩子节点的颜色为它的颜色
35         tree[p<<1] = tree[p<<1 | 1] = tree[p];
36         tree[p] = -1;
37     }
38     
39     if(a > mid)
40         updateT(mid+1, rd, a, b, col, p<<1 | 1);
41     else if(b <= mid)
42         updateT(ld, mid, a, b, col, p<<1);
43     else{
44         updateT(ld, mid, a, mid, col, p<<1);
45         updateT(mid+1, rd, mid+1, b, col, p<<1 | 1);
46     }
47 }
48 
49 int cnt;
50 
51 void querryT(int ld, int rd, int a, int b, int p){
52     if(ld>rd) return ; 
53     
54     if(tree[p] != -1){//一直找到纯色的区间!
55         c[tree[p]]=1;
56         return ;
57     }
58     
59     int mid = (ld+rd)>>1;
60     if(a > mid)
61         querryT(mid+1, rd, a, b, p<<1 | 1);
62     else if(b <= mid)
63         querryT(ld, mid, a, b, p<<1) ;
64     else{
65         querryT(ld, mid, a, mid, p<<1);
66         querryT(mid+1, rd, mid+1, b, p<<1 | 1);
67     }
68 }
69 
70 int main(){
71     while(scanf("%d%d", &n, &m) && (n || m)){
72         char ch[2];
73         int a, b, k;
74         buildT(1, n, 1);
75         while(m--){
76             scanf("%s", ch);
77             if(ch[0] == P){
78                 scanf("%d%d%d", &a, &b, &k);
79                 updateT(1, n, a, b, k, 1);
80             }
81             else{
82                 scanf("%d%d", &a, &b);
83                 memset(c, 0, sizeof(c));
84                 querryT(1, n, a, b, 1);
85                 int i;
86                 for(i=1; i<=30; ++i)
87                     if(c[i]){
88                          printf("%d", i);
89                          break;
90                     }
91                 for(++i; i<=30; ++i)
92                     if(c[i]) printf(" %d", i);
93                 printf("\n");
94             }
95         }
96     }
97     return 0;
98 } 

 

2014 网选 广州赛区 hdu 5023 A Corrupt Mayor's Performance Art

标签:style   blog   color   io   os   ar   for   2014   div   

原文地址:http://www.cnblogs.com/hujunzheng/p/3984149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!