用set維護有序序列
或許sort也可以,但這題的前驅定義是嚴格小於
所以要去重
然後就是記得自己打的加法tag在query的時候一定要算上
話說這題資料有點fake啊忘了查詢算上自己的標記了還有70
然後還有玄學優化
塊的大小從\( \sqrt x \)變成1000每個點能快300ms的樣子qwq
似乎原理是減少維護的set的個數吧
#include #include #include #include #include using namespace std;
const int maxn = 101000;
int n,sz,num,tag[maxn],a[maxn],belong[maxn];
setb[105];
void calbe(int n)
void reset(int x)
void update(int l,int r,int w)
if(xl!=xr)
} for(int i=xl+1;i<=xr-1;i++)
tag[i]+=w;
}int query(int l,int r,int w){
int xl=belong[l];
int xr=belong[r];
int ans=-1;
for(int i=l;i<=min(r,xl*sz);i++)
if(a[i]-tag[xl]&&a[i]+tag[xl]>ans)
ans=a[i]+tag[xl];
if(xl!=xr){
for(int i=(xr-1
(分塊)LOJ 6279 數列分塊入門 3
傳送門 loj 6279.數列分塊入門 3 題意 給出乙個長為n的數列,以及n個操作,操作涉及區間加法,詢問區間內小於某個值x的前驅 比其小的最大元素 以下引用hzwer大佬的解答 n 100000其實是為了區分暴力和一些常數較大的寫法。接著第二題的解法,其實只要把塊內查詢的二分稍作修改即可。不過這...
LOJ 6279 數列分塊3
題目大意 維護 n 個數組成的序列,支援兩種操作 區間加 區間查詢某個值的前驅 小於該值的最大值,若無前驅,輸出 1 題解1 可以像分塊2一樣,維護每個塊內元素的乙個有序序列,每次查詢時二分查詢即可。如下 include define pb push back define all x x.begi...
LibreOJ6279 數列分塊入門 3 題解
題目描述 給出乙個長為 n 的數列,以及 n 個操作,操作涉及區間加法,詢問區間內小於某個值 x 的前驅 比其小的最大元素 輸入格式 第一行輸入乙個數字 n 第二行輸入 n 個數字,第 i 個數字為 a i 以空格隔開。接下來輸入 n 行詢問,每行輸入四個數字 opt l r c 以空格隔開。若 o...