hdu 5023 poj 2777(线段染色)2014 ACM/ICPC Asia Regional 广州 Online
生活随笔
收集整理的這篇文章主要介紹了
hdu 5023 poj 2777(线段染色)2014 ACM/ICPC Asia Regional 广州 Online
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目鏈接:
http://acm.hdu.edu.cn/showproblem.php?pid=5023
http://poj.org/problem?id=2777
題意:給出一個長度為N的線段,分成N段,每一段長度為1,每次操作時,把[L, R]區(qū)間染成顏色C,或者輸出[L, R]區(qū)間里有幾種不同的顏色。
分析:因為N比較大,如果模擬操作肯定會超時。這時我們就可以利用線段樹的lazy思想來進行求解。
#include<cstdio> #include<cstring> #include<set> #include<algorithm> using namespace std;#define lson l, mid, root<<1 #define rson mid+1, r, root<<1|1const int N = 1e6 + 5;set <int> s; set <int> ::iterator it;struct Node {int color;int left;int right;int mid; } a[N<<2];void Push_Down(int root) {if(a[root].color) {a[root<<1].color = a[root].color;a[root<<1|1].color = a[root].color;a[root].color = 0;} }void Build_Tree(int l, int r, int root) {int mid = (l + r) >> 1;a[root].left = l;a[root].right = r;a[root].mid = mid;a[root].color = 2;if(l == r) return;Build_Tree(lson);Build_Tree(rson); }void Update(int l, int r, int c, int root) {if(a[root].left == l && a[root].right == r) {a[root].color = c;return;}if(a[root].color == c) return;Push_Down(root);if(l > a[root].mid) Update(l, r, c, root<<1|1);else if(r <= a[root].mid) Update(l, r, c, root<<1);else {Update(l, a[root].mid, c, root<<1);Update(a[root].mid+1, r, c, root<<1|1);} }void Query(int l, int r, int root) {if(a[root].color) {s.insert(a[root].color);return ;}if(l > a[root].mid) Query(l, r, root<<1|1);else if(r <= a[root].mid) Query(l, r, root<<1);else {Query(l, a[root].mid, root<<1);Query(a[root].mid+1, r, root<<1|1);} }int main() {int n, m;int l, r, c;char op[10];while(~scanf("%d%d", &n, &m) && (n + m)) {Build_Tree(1, n, 1);for(int i = 0; i < m; i++) {scanf("%s%d%d", op, &l, &r);if(op[0] == 'P') {scanf("%d", &c);Update(l, r, c, 1);}else {s.clear();Query(l, r, 1);int ss = s.size();for(it = s.begin(); it != s.end(); it++) {printf("%d", *it);if(ss > 1) printf(" ");ss--;}printf("\n");}}}return 0; }總結(jié)
以上是生活随笔為你收集整理的hdu 5023 poj 2777(线段染色)2014 ACM/ICPC Asia Regional 广州 Online的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用了这么久的数据库连接池,你知道原理吗?
- 下一篇: GitHub被“中介”攻击了?中间人攻击