維護乙個長度為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...