poj2528 線段樹 離散化

2021-08-08 21:45:15 字數 1999 閱讀 6883

不清楚為什麼陣列開小了是wa而不是re

這題其實主要在離散化的操作

離散化完成後 其實就是zoj1610染色覆蓋乙個題意了 希望大家在做這道題之間先把zoj1610做了

看了kuangbin的部落格知道了離散的特殊之處

例子一:1-10 1-4 5-10

例子二:1-10 1-4 6-10

普通離散化後都變成了[1,4][1,2][3,4]

線段2覆蓋了[1,2],線段3覆蓋了[3,4],那麼線段1是否被完全覆蓋掉了呢?

例子一是完全被覆蓋掉了,而例子二沒有被覆蓋

解決的辦法則是對於距離大於1的兩相鄰點,中間再插入乙個點。

具體實現看**和注釋吧

#include#include#include#include#include#include#include#include#include#include#include#include#includetypedef long long ll;

#define exp 1e-8

#define llinf 1000000000000000000

#define gi(x) scanf("%d",&x)

#define gi2(x,y) scanf("%d%d",&x,&y)

#define gll(x) scanf("%lld",&x)

#define gll2(x,y) scanf("%lld%lld",&x,&y)

#define gc(x) scanf("%c",&x)

#define gc2(x,y) scanf("%c%c",&x,&y)

#define up(i,x,y) for(i=x;i<=y;i++)

#define down(i,x,y) for(i=x;i>=y;i--)

#define mem(a,x) memset(a,x,sizeof(a))

using namespace std;

const int maxn=20005;

const int mod=1000000007;

const int inf=0x3f3f3f3f;

int num[maxn<<4];//陣列開小了 為什麼會wa

int vis[maxn];//vis[i]==1說明顏色i存在

int a[maxn<<4];//用於離散化

int maxn=1;//最終更新成線段樹的最大下標

struct node

node[maxn];//記錄n個海報的l和r

struct tree

tree[maxn<<4];//線段樹

void pushdown(int root)//這裡跟zoj1610同理

void build(int l,int r,int root)

int mid=(l+r)/2;

build(l,mid,root*2);

build(mid+1,r,root*2+1); }

void update(int l,int r,int root,int c)

if(l>tree[root].r||r=l) //此節點被包含在需要更新的區間中,此節點的color就更新為c

if(tree[root].color!=-1)

update(l, r, root*2, c);

update(l,r,root*2+1,c);

}void getans(int n)

pushdown(i);

} }int ans=0;

for(i=1;i<=n;i++)//統計海報的種類個數

}} printf("%d\n",ans);

}int main()

} sort(a,a+cnt);//排序

build(1,cnt,1);//建樹 我這裡建樹的區間範圍是[1,cnt]

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

getans(cnt);

}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出現了...