LOJ 6279 數列分塊3

2022-05-20 14:21:14 字數 871 閱讀 9106

題目大意:維護 n 個數組成的序列,支援兩種操作:區間加、區間查詢某個值的前驅(小於該值的最大值,若無前驅,輸出-1)。

題解1:可以像分塊2一樣,維護每個塊內元素的乙個有序序列,每次查詢時二分查詢即可。

**如下

#include #define pb push_back

#define all(x) x.begin(),x.end()

using namespace std;

const int maxn=1e5+10;

const int maxb=1010;

const int inf=0x3f3f3f3f;

inline int read()while(!isdigit(ch));

dowhile(isdigit(ch));

return f*x;

}int n,m,a[maxn];

struct nodeb[maxb];

int tot,bl[maxn];vectorv[maxb];

void make_block()while(!isdigit(ch));

dowhile(isdigit(ch));

return f*x;

}int n,q,a[maxn],pos[maxn],tot;

struct nodeb[1000];

void make_block()

}else

for(int i=l;i<=b[x].r;i++)

for(int i=b[y].l;i<=r;i++)

} return ans==-inf?-1:ans;

}void solve()

}int main()

(分塊)LOJ 6279 數列分塊入門 3

傳送門 loj 6279.數列分塊入門 3 題意 給出乙個長為n的數列,以及n個操作,操作涉及區間加法,詢問區間內小於某個值x的前驅 比其小的最大元素 以下引用hzwer大佬的解答 n 100000其實是為了區分暴力和一些常數較大的寫法。接著第二題的解法,其實只要把塊內查詢的二分稍作修改即可。不過這...

題解 loj6279 數列分塊入門3 (分塊)

用set維護有序序列 或許sort也可以,但這題的前驅定義是嚴格小於 所以要去重 然後就是記得自己打的加法tag在query的時候一定要算上 話說這題資料有點fake啊忘了查詢算上自己的標記了還有70 然後還有玄學優化 塊的大小從 sqrt x 變成1000每個點能快300ms的樣子qwq 似乎原理...

LibreOJ 6279 數列分塊入門 3

題意 給你乙個n nn個整數的序列a aa,讓你進行兩種操作 分析 這裡用分塊 與第二題相似,查詢前驅我們同樣需要排序,不過這裡可能會想到這樣的情況,即對於查詢x xx前驅,如果查詢區間內有多個x,這樣顯然直接二分是不行的,即我們需要去重,或者統計區間內每個元素的個數,這裡便用到了set setse...