題目大意:
給出乙個序列和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 #include6bzoj3809using
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 }
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...