多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > poj 3225 Help with Intervals(線段樹)

poj 3225 Help with Intervals(線段樹)

來源:程序員人生   發布時間:2014-10-02 08:00:00 閱讀次數:2826次

題目鏈接:poj 3225 Help with Intervals

題目大意:模擬集合操作,輸出最終的集合。

解題思路:線段樹。

  • U l r:[l,r]區間置為1
  • I l r:[0,l),(r,maxn]置為0
  • D l r:[l,r]區間置為0
  • C l r:[0,l),(r,maxn]置為0,[l,r]區間取逆
  • S l r:[l,r]區間取逆。

然后基本水水的線段樹,注意一下區間開和閉。

#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 65535 * 2; #define lson(x) ((x)<<1) #define rson(x) (((x)<<1)+1) int lc[maxn * 4], rc[maxn * 4], set[maxn * 4], filp[maxn * 4]; inline void splay(int u) { filp[u] ^= 1; if (filp[u] && set[u] != -1) { filp[u] = 0; set[u] ^= 1; } } inline void maintain(int u, int v) { set[u] = v; filp[u] = 0; } inline void pushdown (int u) { if (set[u] != -1) { maintain(lson(u), set[u]); maintain(rson(u), set[u]); set[u] = -1; } if (filp[u]) { splay(lson(u)); splay(rson(u)); filp[u] = 0; } } void build (int u, int l, int r) { lc[u] = l; rc[u] = r; maintain(u, -1); if (l == r) { maintain(u, 0); return; } int mid = (l + r) / 2; build (lson(u), l, mid); build (rson(u), mid + 1, r); } void modify (int u, int l, int r, int v) { if (l > r) return; if (l <= lc[u] && rc[u] <= r) { maintain(u, v); return; } pushdown(u); int mid = (lc[u] + rc[u]) / 2; if (l <= mid) modify(lson(u), l, r, v); if (r > mid) modify(rson(u), l, r, v); } void change (int u, int l, int r) { if (l > r) return; if (l <= lc[u] && rc[u] <= r) { splay(u); return; } pushdown(u); int mid = (lc[u] + rc[u]) / 2; if (l <= mid) change(lson(u), l, r); if (r > mid) change(rson(u), l, r); } int query (int u, int x) { if (lc[u] == x && x == rc[u]) return set[u]; pushdown(u); int mid = (lc[u] + rc[u]) / 2; if (x <= mid) return query(lson(u), x); else return query(rson(u), x); } int L, R; char op, LP, RP; inline void put (int left, int right) { if (left&1) printf("(%d,", left/2); else printf("[%d,", left/2); if (right&1) printf("%d)", (right + 1) / 2); else printf("%d]", right / 2); } int main () { build (1, 0, maxn); while (~scanf("%c%*c%c%d,%d%c%*c", &op, &LP, &L, &R, &RP)) { L *= 2; R *= 2; if (LP == '(') L++; if (RP == ')') R--; if (op == 'U') { modify(1, L, R, 1); } else if (op == 'I') { modify(1, 0, L - 1, 0); modify(1, R + 1, maxn, 0); } else if (op == 'D') { modify(1, L, R, 0); } else if (op == 'C') { change(1, L, R); modify(1, 0, L - 1, 0); modify(1, R + 1, maxn, 0); } else if (op == 'S') change(1, L, R); } bool flag = false; int c = 0, t; for (int i = 0; i <= maxn; i++) { int s = query(1, i); if (s && !flag) { t = i; flag = true; } else if (!s && flag) { if (c++) printf(" "); put(t, i-1); flag = false; } } if (c == 0) printf("empty set "); else printf(" "); return 0; }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本特黄视频 | 亚洲春色视频 | 亚洲国产精品久久久久网站 | 欧美一本 | 性欧美free | 亚洲国产欧美日韩精品小说 | 亚洲国产成人久久综合一区 | 欧美在线一级精品 | 欧洲精品码一区二区三区免费看 | 中文字幕免费在线看 | 久久综合九九亚洲一区 | 日本无卡无吗在线 | 中国在线观看www视频 | 高清性欧美xxx | 精品综合 | 国产欧美成人免费观看视频 | 欧美18videosex性极品 | 成人亚欧网站在线观看 | 亚洲成人h | 伊人222成人综合网 伊人2233 | 亚洲小视频在线播放 | nnnwww在线观看视频 | 国产精品亚洲片在线不卡 | 久久久无码精品亚洲日韩按摩 | 边吃奶边操 | 国产欧美一区二区三区久久 | 亚洲a图| 波多野结衣精品一区二区三区 | 日本综合视频 | 91亚洲精品福利在线播放 | 国产一级毛片欧美视频 | 亚州不卡| 亚洲精品网站在线观看不卡无广告 | xxx性欧美 | 国产精品视频福利 | 91最新地址永久入口 | 亚洲性图在线 | 一区二区三区四区五区六区 | 日韩高清免费观看 | 黄色毛片视频网站 | 欧美第一色 |