永恆和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的戰壕的個數。
題目分析:這題太水了……雖然上面說是樹狀數組,但暴力就過了……
代碼如下:
#include<iostream>
#include<cstdio>
using namespace std;
int x[32001],y[32001],ans[15001];
int main()
{
int n;
scanf("%d",&n);
for (int i=1; i<=n; i++) scanf("%d%d",&x[i],&y[i]);
for (int i=1; i<=n; i++)
{
int total=0;
for (int j=1; j<=n; j++)
{
if (x[j]<=x[i] && y[j]<=y[i] && i!=j) total++;
}
ans[total]++;
}
for (int i=0; i<n; i++) printf("%d\n",ans[i]);
return 0;
}