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