題目大意:給n個數字,m個詢問
每次詢問[l,r]區間的數字,比k小的數字有多少個。 下標從0~n-1
直接離線後樹狀陣列,聽說劃分樹也能過
略微更新的我的破爛離散化小板子~
#include using namespace std;
#define pr(x) cout<< #x << " = " vectormp[maxn];
void init()
for (int i = 1; i <= n; ++ i)
lisan.ins(0x7fffffff);
lisan.ins(-2000000000);
lisan.doit();
n += 2;//因為多新增乙個數字,所以可能有n+1個不同的數字,[1,n+1]區間
}int ll[maxn],rr[maxn],kk[maxn];
//g[i][j] [1..i]區間,比j小的數字的數量
void doit()
for (int i = 1;i <= n ; ++ i) }
for (int i = 1; i <= m; ++ i) }
int main()
return 0;
}
HDU4417(主席樹計數)
解題思路 如果說用排序,那麼複雜度就是o mnlogn 會超時。用主席樹的空間複雜度是o nlogn 時間複雜度是o max nlogn,mlogn 這道題稍微修改一下query函式即可。include include include include define n 100009 using na...
hdu 2838 樹狀陣列水題
提議是給你乙個序列 讓你調整把它變成 從小到大排列的有序序列 沒調動兩個為兩權值之和 問最小的權值和是多少 給個數列 1 4 2 3 5 對每乙個位置數 需要交換的比為前面比它大的數 或後面比它小的數 包含了最小值在裡面了 比如pi前面有5個數比它大 則就需要把這5個數和pi交換 交換的權值就是這5...
hdu 1594 樹狀陣列 水題
思路 乙個座標的level和它的y座標是無關的,因為x和y都是公升序leve給出的,乙個座標的level只和前面所有的x有關,那麼可以抽象這麼乙個a陣列 實際上是不存在的,只是抽象出來 每輸入乙個x,就對a x 1 因為有0 當前a 1 a x 1 的和就是該座標的level,那麼這個a陣列就可以用...