bzoj3809 莫隊 分塊

2022-08-20 03:57:10 字數 1472 閱讀 6471

題目大意:

給出乙個序列和m個詢問,每個詢問求[l,r]中權值∈[a,b]的權值的種類數

由於詢問是離線的,考慮莫隊。顯然可以用修改和查詢為o(log2n)的樹狀陣列維護權值種類數,但這種做法的總時間複雜度是o(n*sqrt(n)*log2m),可能會tle。

注意到總共有o(m)個查詢、o(n*sqrt(n))個修改,所以可以使用o(sqrt(n))查詢、o(1)修改的分塊。總時間複雜度為o(m*sqrt(n)+n*sqrt(n))

**:

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7 inline char

nc()

13return *p1++;14}

15 inline void read(int&x)

20#define n 100010

21#define m 1000010

22#define lowbit(x) x&-x

23struct

nodea[m];

26int i,j,l,r,k,n,m,c[n],a[n],s,ans[m],ma,sum[350

],cnt[n],b[n];

27 inline bool

cmp(node x,node y)

30 inline void u(int

x)33 inline void d(int

x)36 inline int query(int x,int

y)42

for(int i=b[x]+1;isum[i];

43for(int i=x;b[i]==b[x];i++)ans+=(cnt[i]?1:0

);44

for(int i=y;b[i]==b[y];i--)ans+=(cnt[i]?1:0

);45

return

ans;46}

47int s[20

];48

intlen;

49 inline void print(int

x)51

for(len=0;x;x/=10)s[++len]=x%10;52

for(;len;)putchar(s[len--]+48

);53 putchar('\n'

);54}55

intmain()

5664

for(i=1;i<=m;i++)

68 sort(a+1,a+m+1

,cmp);

69for(i=1,l=1,r=0;i<=m;i++)

76for(i=1;i<=m;i++)print(ans[i]);

77 }

bzoj3809

bzoj 3809 莫隊 分塊求和

time limit 80 sec memory limit 28 mb submit 1185 solved 330 submit status discuss autumn和bakser又在研究gty的妹子序列了!但他們遇到了乙個難題。對於一段妹子們,他們想讓你幫忙求出這之內美麗度 a,b 的妹...

bzoj3585 莫隊 分塊

description 有乙個長度為n的陣列。m次詢問,每次詢問乙個區間內最小沒有出現過的自然數。input 第一行n,m。第二行為n個數。從第三行開始,每行乙個詢問l,r。output 一行乙個數,表示每個詢問的答案。sample input 5 52 1 0 2 1 3 32 3 2 41 2 ...

bzoj3585 mex 莫隊 分塊

ac通道 題解 這題思維上有些難度,蒟蒻不得不 了popoqqq大爺題解。將1 n之間的自然數分成根號n塊,每個塊記錄當前塊中已經出現的不同的自然數的個數。那麼在查詢時只需要檢驗每個塊是否滿足r i l i 1 blo i 找到第乙個不滿足以上條件的,然後在該塊內暴力查詢即可。bzoj 3585 b...