2528 Mayor's posters(離散化+區間更新)
給你n個桌布,桌布之間高度相同,按照順序粘桌布,問能看見多少張桌布。
首先桌布的距離範圍太長,無法用陣列儲存,需要先離散化,然後進行區間更新,用陣列維護區間,每個區間陣列的值有(-1:這個區間沒桌布;0:這個區間有多個桌布;1~n:這個區間是第i個桌布)。程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define maxn 30000 #define lmin 1 #define rmax n #define lson l,(l+r)/2,rt<<1 #define rson (l+r)/2+1,r,rt<<1|1 #define root lmin,rmax,1 #define now l,r,rt #define int_now int l,int r,int rt int cl[maxn<<2] , lazy[maxn<<2] , a[maxn] ; struct node{ int id1 , id2 , k ; }p[maxn]; bool cmp(node a,node b) { return a.k < b.k ; } void push_up(int_now) { if( !cl[rt<<1] || !cl[rt<<1|1] || cl[rt<<1] != cl[rt<<1|1] ) cl[rt] = 0 ; else cl[rt] = cl[rt<<1|1] ; } void push_down(int_now) { if( lazy[rt] != -1 ) { lazy[rt<<1] = lazy[rt<<1|1] = lazy[rt] ; cl[rt<<1] = cl[rt<<1|1] = lazy[rt] ; lazy[rt] = -1 ; } } void update(int ll,int rr,int x,int_now) { if( ll > r || rr < l ) return ; if( ll <= l && r <= rr ) { cl[rt] = lazy[rt] = x ; return ; } push_down(now); update(ll,rr,x,lson); update(ll,rr,x,rson); push_up(now); } void query(int ll,int rr,int_now,int *a) { if( cl[rt] == -1 ) return ; else if(cl[rt] > 0) { a[ cl[rt] ] = 1 ; return ; } push_down(now); query(ll,rr,lson,a); query(ll,rr,rson,a); } int main() { int t , i , n , m , l , r , x ; scanf("%d", &t); while(t--) { scanf("%d", &m); for(i = 0 ; i < m ; i++) { scanf("%d %d", &p[i].k, &p[i+m].k); p[i].id1 = i ; p[i+m].id1 = i+m ; } sort(p,p+2*m,cmp); int temp = -1 ; n = 0 ; for(i = 0 ; i < 2*m ; i++) { if( p[i].k == temp ) p[i].id2 = n ; else { p[i].id2 = ++n ; temp = p[i].k ; } a[ p[i].id1 ] = p[i].id2 ; } memset(cl,-1,sizeof(cl)); memset(lazy,-1,sizeof(lazy)); for(i = 0 ; i < m ; i++) { update(a[i],a[i+m],i+1,root); } memset(a,0,sizeof(a)); query(1,n,root,a); int num = 0; for(i = 1 ; i <= m ; i++) if(a[i]) num++ ; printf("%d\n", num); } return 0; }
相關推薦
2528 Mayor's posters(離散化+區間更新)
給你n個桌布,桌布之間高度相同,按照順序粘桌布,問能看見多少張桌布。 首先桌布的距離範圍太長,無法用陣列儲存,需要先離散化,然後進行區間更新,用陣列維護區間,每個區間陣列的值有(-1:這個區間沒桌布;0:這個區間有多個桌布;1~n:這個區間是第i個桌布)。程式碼如下: #
poj2528——Mayor's posters(離散化+區間覆蓋)
Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing t
POJ2528——Mayor's posters (線段樹區間更新查詢+離散化)
The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral poste
POJ - 2528 Mayor's posters (離散化+線段樹區間修改)
clu max 單位 cover rst unique ace output https https://cn.vjudge.net/problem/POJ-2528 題意 給定一些海報,可能相互重疊,告訴你每個海報的寬度(高度都一樣的)和先後疊放順序,問沒有被完全蓋
POJ 2528 Mayor's posters(線段樹+離散化)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 60691 Accepted: 17565 Description The citizens of Byteto
poj 2528 Mayor's posters(樹狀陣列+離散化)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 63793 Accepted: 18415 Description The citizens of Byteto
POJ 2528 Mayor's posters 線段樹成段更新+離散化
題意:很多張海報貼在牆上 求可以看到幾張海報 看那兩張圖就行了 第一張俯檢視 思路:最多2W個不同的數 離散化一下 然後成段更新 a[rt] = i代表這個區間是第i張報紙 更新玩之後一次query cover[i]=1代表可以看到第i張報紙 #include <c
POJ 2528 Mayor's posters (線段樹 離散化+區間更新+區間求值 )
href eof 求值 給定 一個點 一個 stream 問題 void 題目鏈接:http://poj.org/problem?id=2528 題意:塗色問題,給定n個要塗色的區間(每次用的顏色不一樣,顏色覆蓋性極強),問最後能看到多少種顏色。(貼海報問題轉換) 題解
poj 2528 Mayor's posters【區間離散化】
文章目錄題目連結: 題目連結: http://poj.org/problem?id=2528 題意:就是有 N 種海報,每種海報有個長度[L,R],後來的海報會覆蓋前面來的海報,問最後從最上面看,能看得到幾種海報 input: 3 3 5 6 4 5 6 8
Mayor's posters(區間覆蓋+點離散化)
The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral pos
POJ 2528 Mayor's posters 線段樹(成段更新+離散化)
題意: 給出N個海報,每個海報有一個長度區間(a,b).按順序貼在牆上。 問最後可以看到幾張海報。 思路: 一想到的就是線段樹,對每個區間進行染色,最後查詢一共有多少種顏色。 第一次寫玩沒看資料大小。MLE了。。仔細一看,海報長度1QW。 然後寫了個離散化的,300MS+。
POJ 2528 Mayor's posters [ 離散化 + 線段樹 ]
題目連結: 題意概括: 依次貼上 n 張海報,每張海報會覆蓋一個區間。後貼上的海報會覆蓋前貼的海報,問最後可以看見幾張海報 這裡的區間不是拿兩端點來維護的,是直接按單位最小區間來編號。如 [3, 5] 區間是由編號為 3、4、5的區間組成的 資料範圍:
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
/* THE PROGRAM IS MADE BY PYY */ /*----------------------------------------------------------------------------// Copyright (c) 2011 panyanyany All rig
poj 2528 Mayor's posters(離散化+線段樹)
題意: 市長競選,每個市長都往牆上貼海報,海報之間彼此可以覆蓋,給出貼上順序和每個海報的起點和終點,問最後又多少海報時可見的。 剛接觸離散化,先寫一寫本人的理解: 如果原資料太大,建樹會超記憶體。因此可以先對這些數排序,然後將它們對映成排序後的序號。比如在該題中,[1,
POJ 2528 Mayor's posters (線段樹+離散化 成段替換)
題目大意: 就是在一段區間上貼海報, 後來的區間會把前面來的區間覆蓋掉, 為貼完海報後能看到幾張海報(只看到一部分也算看到) 大致思路: 就是區間替換更新, 標記一下當前區間的所有的海報是否一致, 用懶惰標記標記一下當前區間的類別 聽說資料比較水...布吉島嚴格的資料下這
POJ 2528 Mayor's posters 區間染色問題
題目意思 每個案例一個數字n,接下來n行表示張貼海報的起點與終點,求有多少海報沒有被完全遮住,經典區間染色問題。本題資料量比較大,所以需要將起點和終點離散化處理。 Sample Input 1 5 1 4 2 6 8 10
EOJ2458(離散化+線段樹)
這題題意就是問n個點序列,從小到大排列,問區間裡最長的相等點的長度是多少。那麼我們很容易想到線段樹,將相同點相連即使一條線段,然後問區間裡線段最長的是多少。因為題目給的是1 ≤ n, q ≤ 100000,所以直接建樹勢必複雜度將會很大,因此這裡我們對初始資
HDU - 4348 To the moon(主席樹區間更新)
ring targe 鏈接 query panel iostream ref c++ span 題目鏈接:To the moon 題意:給個數組,三種操作,第一種詢問當前區間[l,r]的和,第二種給區間[l,r]的每一個數加上d,第三種詢問在第幾次修改後[l,r]的權值
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的範