POJ2528 線段樹的區間操作

2022-09-15 18:39:13 字數 958 閱讀 1454

首先應該對該【0,10000000】進行離散化

即先將點集進行排序,然後從小到大縮小其中的間距,使得最後點數不會超過2*n

然後就是線段樹操作

只需進行染色,然後最後用nlgn進行乙個個查詢顏色記錄即可

#include

#include

int color[20005*4],a[20005],p[20005],l[10005],r[10005],pd[10005],i,j,k,n,t,length;

void qs(int x,int y)

}while(i=y) return;

int m=(x+y)/2;

build(x,m,2*rt);

build(m+1,y,2*rt+1);

}void pushdown(int rt)

}void update(int x,int y,int rt)

pushdown(rt);

int m=(x+y)/2;

if(l[k]<=m) update(x,m,rt*2);

if(r[k]>m) update(m+1,y,rt*2+1);

}int query(int x,int y,int rt)

else return 0;

}if(x==y) return 0;

int m=(x+y)/2;

return(query(x,m,rt*2)+query(m+1,y,rt*2+1));

}int main()

qs(1,2*n);

length=1;

for(i=1;i<=2*n;i++)

build(1,length,1);

for(k=1;k<=n;k++)

update(1,length,1);

printf("%d\n",query(1,length,1));

}return 0;

}

POJ2528 離散化線段樹

將資料離散化在使用線段樹 有一面牆,被等分為1qw份,乙份的寬度為乙個單位寬度。現在往牆上貼n張海報,每張海報的寬度是任意的,但是必定是單位寬度的整數倍,且 1qw。後貼的海報若與先貼的海報有交集,後貼的海報必定會全部或區域性覆蓋先貼的海報。現在給出每張海報所貼的位置 左端位置和右端位置 問張貼完n...

poj 2528 線段樹 離散化

題目連線 題目大意 在一面牆上貼海報,牆很長,後面貼上去的海報要覆蓋掉之前貼上去的海報,現在向牆上逐一的貼海報,問到最後牆上可以看見的海報有幾種?方法 線段樹,離散化 include include include include using namespace std define maxn 10...

poj2528(離散化 線段樹)

題意 在1 10 7的長度上貼海報,求能看到的海報數目 解題思路 10 7無論用樸素法或線段樹解都會超時超記憶體,所以要進行離散化。所謂離散化就是把有限的個體對映到有限的空間,以此提高演算法的時空效率以這題的測試資料為例,本題的五個區間為1 4,2 6,8 10,3 4,7 10 其中10和4出現了...