bzoj 3110 K大數查詢(整體二分)

2021-08-13 09:07:42 字數 1031 閱讀 8616

傳送門biu~

整體二分。我選擇把資料用樹狀陣列維護,樹狀陣列可以支援區間修改區間查詢。

你們可能永遠不會知道一道題沒開long long要調多久qaq

#include

#define lowbit(x) (x&(-x))

using

namespace

std;

#define int long long

struct dataa[50005];

int n,m,tim;

int ans[50005];

int p[50005],tmp[2][50005];

int tree[2][50005],t[2][50005];

inline

void add(int opt,int x,int num)

}inline

void add(int l,int r)

inline

int search(int opt,int x)

return re;

}inline

int search(int x)

void binary_search(int l,int r,int l,int r)

return;

}tmp[0][0]=tmp[1][0]=0;

for(int i=l;i<=r;++i)

}else

else tmp[1][++tmp[1][0]]=x;}}

int rl=l+tmp[0][0];

memcpy(p+l,tmp[0]+1,sizeof(p[0])*tmp[0][0]);

memcpy(p+rl,tmp[1]+1,sizeof(p[0])*tmp[1][0]);

binary_search(l,rl-1,l,mid);

binary_search(rl,r,mid+1,r);

}#undef int

int main()

return

0;}

BZOJ 3110, K大數查詢

傳送門 要求維護乙個數列,支援在某部分的每個位置填上乙個數以及查詢某部分第k大的數字。終於學習了一下樹套樹的姿勢 其實和自己想的也差不多 但是不學還是打不出 來 外層是權值線段樹,內層是區間線段樹。要注意的細節比較多。二分查詢過程中結果可能超過maxlongint,需要用unsigned int型別...

bzoj 3110 K大數查詢 樹套樹

題目傳送門 time limit 20 sec memory limit 512 mb submit 5039 solved 1751 submit status discuss 有n個位置,m個操作。操作有兩種,每次操作如果是1 a b c的形式表示在第a個位置到第b個位置,每個位置加入乙個數c ...

BZOJ 3110 k大數查詢 樹套樹

5e4個可重集合,初試全空,5e4個操作 1.在第 l,r 集合裡加入乙個數c 2.問 l,r 所有集合的並的第k大數 發現很多題解都寫得權值線段樹套區間線段樹啊,我覺得這題反過來套比較直白吧。不過寫了一半陷入了奇怪的思維漩渦裡。就跟著題解寫了個權值套區間線段樹,在luogu上開了o2,加了讀入掛,...