題目大意:原題鏈結
就是求每個小星星左小角的星星的個數。座標按照y公升序,y相同x公升序的順序給出
由於y軸已經排好序,可以按照x座標建立一維樹狀陣列
關鍵是要理解樹狀陣列中的c[maxn]陣列的構成方式,例如c1=a1,c2=c1+a2,c3=a3,c4=c2+c3+a4,c5=a5,
c6=c5+a6,c7=a7,c8=c4+c6+c7+a8......
(可以發現當c[maxn]陣列的下標為2的冪次方時,c[n]則為陣列a[maxn]的前n項和)
具體請看樹狀陣列的構成圖
sum(int i)表示對a[maxn]陣列元素的求前i項和
#include#includeusing
namespace
std;
int c[32010
];int cnt[15010
];int lowbit(int
x)void add(int i,int
val)
//i為下乙個管轄i在內且即將要修改的c[maxn]陣列元素下標}//
返回s為橫座標為i的左下方的星星個數之和(同時也是該星星級數)
int sum(int
i) //
i為下乙個雖不被i管轄卻即將要加和的c[maxn]陣列元素下標
returns;}
intmain()
for(int i=0;i)
printf(
"%d\n
",cnt[i]);
}return0;
}
pku2352 Stars 線段樹實現
第乙個線段樹。線段樹真是靈活多變啊。看來要好好掌握還要多加練習。pku2352 name stars date 02 08 08 16 41 description 統計問題,線段樹 include define max 72010 define pr printf file pp fopen te...
樹狀陣列 poj2352 Stars
stars 題目 題意 在乙個二維陣列中統計某個等級星星的個數,星星的等級為不比此星星高且不在它右邊範圍內的星星個數。題解 因為輸入的資料已經排序,只要一邊接收輸入一邊計算等級即可。include includeusing namespace std int a 15005 c 32010 defi...
poj 2352 Stars(樹狀陣列)
題意 依次給出n個星星的座標 y座標以非遞減的順序輸入 對於每個星星,她的等級等於她左下方的星星的個數和 包括邊界上的星星 要求輸出等級0到等級n 1的星星的個數。0 x,y,32000,1 n 15000 設x i 表示橫座標為i的星星有多少顆,那麼對於乙個單一詢問 星星 k,y 的等級是多少?要...