1. 程式人生 > >HIHO #1079 : 離散化(線段樹+離散化)

HIHO #1079 : 離散化(線段樹+離散化)

#include<bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) #define LL long long #define pb push_back #define gcd __gcd #define For(i,j,k) for(int i=(j);i<k;i++) #define lowbit(i) (i&(-i)) #define _(x) printf("%d\n",x) const int maxn = 1e5+10; const int inf = 1 << 28
; vector<pair<int,int> > seg; int f[maxn<<1]; struct node{ int color; int lazy; node(){lazy=color=0;} }p[maxn<<2]; void push_down(int rt){ if(p[rt].lazy){ p[rt<<1].lazy=p[rt<<1|1].lazy = p[rt].lazy; p[rt<<1].color = p[rt<<1
|1].color=p[rt].color; p[rt].lazy=0; } } void updata(int rt,int l,int r,int x,int y,int v){ if(x<=l&&r<=y){ p[rt].color = v; p[rt].lazy = v; return ; } int mid = l+r>>1; push_down(rt); if(x<=mid) updata(rt<<1,l,mid,x,y,v); if
(y> mid) updata(rt<<1|1,mid+1,r,x,y,v); } set<int> s; void query(int rt,int l,int r,int x,int y){ if(l==r){ if(p[rt].color)s.insert(p[rt].color); return ; } if(p[rt].lazy){ s.insert(p[rt].color);return ; } int mid = l+r>>1; push_down(rt); if(x<=mid) query(rt<<1,l,mid,x,y); if(y> mid) query(rt<<1|1,mid+1,r,x,y); } int main(){ int n,m; scanf("%d%d",&n,&m); int tot = 0; for(int i=0;i<n;i++){ int x,y;scanf("%d%d",&x,&y); if(x>y)swap(x,y); seg.push_back(make_pair(x,y)); f[tot++] = x; f[tot++] = y; } sort(f,f+tot); tot = unique(f,f+tot) - f; for(int i=0;i<n;i++){ int a = lower_bound(f,f+tot,seg[i].first)-f+1; int b = lower_bound(f,f+tot,seg[i].second)-f+1; updata(1,1,tot,a,b-1,i+1);//更新時候右端點減一,彌補 } query(1,1,tot,1,tot); printf("%d\n",s.size()); return 0; }

相關推薦

HIHO #1079 : 離散線段+離散

#include<bits/stdc++.h> using namespace std; #define cl(a,b) memset(a,b,sizeof(a)) #define LL long long #define pb push_back #define gcd __gcd #defi

【POJ 2482】 Stars in Your Window線段+離散+掃描線

d+ opera algorithm ans som lov ble word wait 【POJ 2482】 Stars in Your Window(線段樹+離散化+掃描線) Time Limit: 1000MS M

POJ 2528 Mayor's posters 線段 離散+區間更新+區間求值

href eof 求值 給定 一個點 一個 stream 問題 void 題目鏈接:http://poj.org/problem?id=2528 題意:塗色問題,給定n個要塗色的區間(每次用的顏色不一樣,顏色覆蓋性極強),問最後能看到多少種顏色。(貼海報問題轉換) 題解

POJ 1151 Atlantis線段離散求面積並(C++)

題目連結:http://poj.org/problem?id=1151 算是模板題,做這個之前要搞懂離散化。這裡,區間最好用[L,R),要不然有些區間無法計算得到。人比較懶,自己去琢磨,不寫註釋了QAQ。 #include <cstdio> #include <v

POJ2528 Mayor's posters線段+離散

Mayor’s posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 57835 Accepted: 16725 Description The ci

POJ 2528 Mayor's posters線段+離散

Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 60691 Accepted: 17565 Description The citizens of Byteto

HDU 2836 Traversal線段+離散+DP

題意:給你n個數的序列, 一個數h, 求相鄰數之差不超過h的子序列的個數和 % 9901。 思路:經典水題, 顯然用d[i]表示以a[i]結尾的滿足條件的子序列個數。  那麼對於j < i , | a[j] - a[i] | <= h , 等價於 a[j] &

Mayor's posters線段+離散

++ main splay d3d close tree pac pair lin 這道題最關鍵的點就在離散化吧。 假如有三張海報[1, 10] [10, 13][15, 20] 僅僅三個區間就得占用到20了。 但是離散化後就可以是[1, 2] [2, 3] [

[51nod 1208] Stars in Your Window線段,掃描線

51nod clas html 題目 val col while cto pro 題目鏈接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1208 題意:也是矩形框點問題,不過每個點有權值,希望

HDU 4027 Can you answer these queries?線段區間開方

sizeof sqrt .cn swap %d nes nts following clr Can you answer these queries? Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 6576

51nod 1463 找朋友線段+離線處理

query max nbsp update ring tdi 包含 覆蓋 vector http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1463 題意: 思路: 好題! 先對所有查

HDU 3974 Assign the task線段 時間戳

truct stream char %d 節點 正在 原因 scanf 全部 題目鏈接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3974 題意:n名員工組成一棵樹,分配任務給其中一名員工,那麽他和他的手下(就是該節點

最簡單的問題重慶市第八屆大學生程序設計大賽D 線段+離線思想

return ans img 個數 pre 子序列 clear 可持久化 sort 考場上的時候直接一臉懵逼了,啥? 區間裏面又要求子區間,還TM有上下界? 略加思索後倒是發現沒有那麽麻煩,因為很容易得出如下結論: 1.對於一個滿足條件的區間[L , R],對於他所有

HDU 1264 Counting Squares(Hash)或者線段+線掃描

bsp pan 解決 printf 就是 大小 lag 線段 ash http://acm.hdu.edu.cn/showproblem.php?pid=1264 題意:給你矩形的左下角和右上角兩個坐標,讓你求這些矩形覆蓋的面積的大小!~ 分析:一看就是線段樹+線掃描的問題

2017 ICPC 西安站現場賽 A.XOR 線段+線性基

getchar tput 線性 calculate ext following case all pri XORConsider an array A with n elements. Each of its element is A[i] (1 ≤ i ≤ n). Th

Lost Cows線段+二分判定

div ascend printf for () instead site uil red 4835: [Usaco2003 Open]Lost Cows Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 21 Solved:

降臨線段優化dp

main spa space odi pri line 除了 發現 獲得 降臨 選定點i會有代價\(c_i\),如果一個區間j內的點全被選擇,就可以獲得回報\(p_j\)。點數和區間個數\(<1e5\)。 還以為是線段樹優化網絡流(50萬個點200萬條邊看上去很可

BZOJ2212 Poi2011Tree Rotations線段合並

|| 線段樹 merge stdin using add clu ota pac 顯然子樹內的操作不會對子樹外產生影響。於是貪心,若交換之後子樹內逆序對減少就交換。 這個東西可以用權值線段樹計算。操作完畢後需要對兩棵權值線段樹合並,這個的復雜度是兩棵線段樹的重復節點個數。那

bzoj 2212 : [Poi2011]Tree Rotations 線段合並

sin lse online space 量變 ++ ota hup 左右 題目鏈接:https://www.lydsy.com/JudgeOnline/problem.php?id=2212 思路:用線段樹合並求出交換左右兒子之前之後逆序對的數量,如果數量變小則交換.

ZOJ - 1610 Count the Colors線段區間更新

線段樹 pan 遍歷 cst include stdin cstring syn bit https://cn.vjudge.net/problem/ZOJ-1610 題意 給一個n,代表n次操作,接下來每次操作表示把[l,r]區間的線段塗成k的顏色其中,l,r,k的範