HNOI2016模擬4 10 K小數查詢

2021-07-14 12:29:07 字數 1082 閱讀 9450

維護乙個長度為n的序列,該序列支援q個操作:

①將第l到r個數加上x

②詢問l到r之間第k小個數是什麼。

看到實現時間7000ms,嘿嘿,果斷分塊打法。~~

大呼:分塊**好

這題因為有區間加操作,直接用資料結構難以維護區間 k 小值。但是可以用

分塊解決此題。最簡單的方法是每個塊維護原塊和排序後的塊,詢問時二分答案,

話說這時間複雜度有點玄學啊。。汗。。(⊙﹏⊙)

也可用分塊套線段樹但常數較大。 蒟蒻表示σ( ° △ °|||)︴

「本題資料範圍對於分塊題來說較大,時間較長,是為了區分分塊和暴力。」——題解

這是什麼鬼。。好幾次嚇得我以為超時了。。

#include 

#include

#include

#include

#include

#define fo(i,a,b) for (int i=a;i<=b;i++)

#define inf 5000000

#define n 80005

#define l(x) (x-1)*block+1

#define r(x) min(x*block,n)

using

namespace

std;

int n,block,a[n],b[n],wz[n],c[n],max=0;

void px(int x)

void refresh(int l,int r,int x)

else

}int find(int l,int r,int x)

return ans;

}int binary_search(int ll,int rr,int x)

return r;

}int main()

fo(i,1,m) sort(b+l(i),b+r(i)+1);

int q;

scanf("%d",&q);

int mark,l,r,x;

while (q--)

}

HNOI2016模擬4 10 K小數查詢

維護乙個長度為n的序列,使得其支援m次操作,包括區間插入和區間求k小數。n,m 80000,在任何時候 ai 5000000 一看到區間第k大 小,就想到了主席樹。但這個是區間修改!怎麼做呢?分塊 好 觀察到時限7s,果斷上分塊。複雜度好不科學 分塊 好?用每乙個塊維護排過序後的塊和原來的塊,然後對...

HNOI2016模擬4 10 線性代數與邏輯

這題廢了。首先,題意一定要明白。我們要構造乙個y陣列 一維,題目的 然後再構造出我們要的x矩陣。滿足xi,j yi yj 由於題目要 也就是對於每乙個位置 i,j 要使x i,j a i,j 然後,我們要讓 也就是說,y中0的個數和1的個數差最小。答案就是 上標 include include de...

HNOI2016模擬4 10 線性代數與邏輯

這題廢了。首先,題意一定要明白。我們要構造乙個y陣列 一維,題目的 然後再構造出我們要的x矩陣。滿足xi,j yi yj 由於題目要 也就是對於每乙個位置 i,j 要使x i,j a i,j 然後,我們要讓 也就是說,y中0的個數和1的個數差最小。答案就是 上標 include include de...