擦 這題 絕逼 坑人 + 一波n折。。。。
touch me
我一開始 用了最簡單 最sb的 一維hash陣列 來做 我看時間2000ms最大數才10w 還以為能過的 ...果斷tle了
然後 就覺得應該用更高效的資料結構來做了
我去問下了下porker 他一開始和我提了下 splay 不會啊=-=
然後 說 樹狀陣列 + 查詢的時候 用二分 也可以做到
我就去往 這個方向去想了--------tm的被自己思維定勢了... tree[x]把它固定成x有幾個了... 然後就一直沒做出來
後來 參考了傳送
最tm坑的是 我用cin cout一直tle明明已經寫了cin.sync..............
然後改成scanf printf 看a了之後 再改回來 再交 又tle了
臥槽...
1 #include 2 #include 3view codeusing
namespace
std;45
const
int size = 100010;6
int tree[size];//
tree[x] 即 小於等於x的數有幾個78
int lowbit( int
x )9
1213
void update( int x , int
var)
1420}21
22int getnum( int
x )23
30return
cnt;31}
3233
int find( int x , int
k )34
46else
4752}53
return
ans;54}
5556
intmain()
5773
else
if( m==1)74
82else
8386}87
else
8899
}100
}101
return0;
102 }
1 #include 2 #include 3view codeusing
namespace
std;45
const
int size = 100010;6
inthash[size];78
intmain()927
else
if( choice == 1)28
34else
3538}39
else
4055}56
}57if( !flag )
58 cout << "
not find!
"<
60}61}
62return0;
63 }
hdu 2852 樹狀陣列
在基礎上加了二分查詢 include include include using namespace std define m 100005 int n,a m int flage int lowbit int i void update int i,int val int sum int i re...
HDU2852 樹狀陣列 二分
思路 樹狀陣列是用來標記的!值 區間點!因為這裡值重複是算的,所有樹狀陣列存的是區間上該位置的個數。0 插入則插入。1 if sum x sum x 1 puts no.2 我們知道a 包括a 之前有多少個數x,求第k大的數,也就是求在樹狀陣列中第x k大的數。sum ans x k。這個可以直接二...
HDU 2852 樹狀陣列 無序第K小
題目大意 操作 往盒子裡放乙個數。操作 從盒子裡扔掉乙個數。操作 查詢盒子裡大於a的第k小數。解題思路 由於模型是盒子,而不是序列,所以可以用樹狀陣列的順序維護 逆序數思想。對應的樹狀陣列solution add val,1 類似維護逆序數的方法,對應位置上計數 1。注意add的while範圍要寫成...