不清楚為什麼陣列開小了是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出現了...