Vijos 弱弱的戰壕

2022-05-01 05:33:11 字數 1320 閱讀 3377

永恆和mx正在玩乙個即時戰略遊戲,名字嘛~~~~~~恕本人記性不好,忘了-_-b。

mx在他的基地附近建立了n個戰壕,每個戰壕都是乙個獨立的作戰單位,射程可以達到無限(「mx不贏定了?!?」永恆fting...@_@)。

但是,戰壕有乙個弱點,就是只能攻擊它的左下方,說白了就是橫縱座標都不大於它的點(mx:「我的戰壕為什麼這麼菜」tot)。這樣,永恆就可以從別的地方進攻摧毀戰壕,從而消滅mx的部隊。

戰壕都有乙個保護範圍,同它的攻擊範圍一樣,它可以保護處在它左下方的戰壕。所有處於它保護範圍的戰壕都叫做它的保護物件。這樣,永恆就必須找到mx的戰壕中保護物件最多的點,從而優先消滅它。

現在,由於永恆沒有時間來計算,所以拜託你來完成這個任務:

給出這n個戰壕的座標xi、yi,要你求出保護物件個數為0,1,2……n-1的戰壕的個數。

第一行,乙個正整數n(1<=n<=15000)

接下來n行,每行兩個數xi,yi,代表第i個點的座標

(1<=xi,yi<=32000)

注意:可能包含多重戰壕的情況(即有數個點在同一座標)

輸出n行,分別代表保護物件為0,1,2……n-1的戰壕的個數。

5

1 15 1

7 13 3

5 5

121

10

各點2s(算是寬限吧^_^)

ural1028戰役版

sort以x為第一關鍵字,y為第二關鍵字排序,然後列舉排好序的序列,以y為關鍵字建造一棵線段樹,邊查詢邊增值即可;

1 #include2 #include3

const

int maxn=2e5;

4intn;5

intans[maxn],t[maxn];

6struct nates[maxn];

7bool comp(nate a,nate b)

8void add(int k,int l,int r,int

p)13

int mid=l+r>>1,ls=k<<1,rs=ls|1;14

if(p<=mid) add(ls,l,mid,p);

15else add(rs,mid+1

,r,p);

16 t[k]=t[ls]+t[rs];17}

18int

get(int k,int l,int r,int

p)25

intmain()

33for(int i=0;i"

%d\n

",ans[i]);

34return0;

35 }

vijos1066 弱弱的戰壕

永恆和mx正在玩乙個即時戰略遊戲,名字嘛 恕本人記性不好,忘了 b。mx在他的基地附近建立了n個戰壕,每個戰壕都是乙個獨立的作戰單位,射程可以達到無限 mx不贏定了?永恆fting.但是,戰壕有乙個弱點,就是只能攻擊它的左下方,說白了就是橫縱座標都不大於它的點 mx 我的戰壕為什麼這麼菜 tot 這...

弱弱的戰壕

描述 永恆和mx正在玩乙個即時戰略遊戲,名字嘛 恕本人記性不好,忘了 b。mx在他的基地附近建立了n個戰壕,每個戰壕都是乙個獨立的作戰單位,射程可以達到無限 mx不贏定了?永恆fting.但是,戰壕有乙個弱點,就是只能攻擊它的左下方,說白了就是橫縱座標都不大於它的點 mx 我的戰壕為什麼這麼菜 to...

樹狀陣列訓練題1 弱弱的戰壕(vijos1066)

這道題似乎是vijos上能找到的最簡單的樹狀陣列題了。原來,我有乙個錯誤的思想,我的設計是維護兩個樹狀陣列,乙個是橫座標,乙個是縱座標,然後讀入每個點的座標,扔進對應的樹狀陣列內,然後計算時,只要以當前點的座標為末點求字首和,在兩個字首和中取最小的乙個即可。但是這個想法很明顯有錯誤比如如圖的狀況 此...