社区讨论
建议改为:人 傻 常 数 大
P4113[HEOI2012] 采花参与者 4已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @locydyy8
- 此快照首次捕获于
- 2023/10/30 21:46 2 年前
- 此快照最后确认于
- 2023/11/05 08:07 2 年前
如题
本蒟蒻莫队优化到飞起来了依旧133
CPP#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define re register
const int N=2*1e6+100;
int num[N],col[N],ans[N];
int n,m,c,xx,sum;
struct query{
int l,r,id,be;
}q[N];
inline int read(){
char ch=getchar();
int n=0 , f=1;
while(('0' > ch || ch > '9') && (ch != '-')) ch=getchar();
if(ch == '-') f=-1 , ch=getchar();
while('0' <= ch && ch <= '9') n=(n << 1)+(n << 3)+(ch ^ 48) , ch=getchar();
return f*n;
}
bool cmp(query a,query b){
return a.be^b.be?a.l<b.l:a.be&1?a.r<b.r:a.r>b.r;
}
inline void add(int x){
col[x]++;
if(col[x]==2)sum++;
}
inline void del(int x){
col[x]--;
if(col[x]==1)sum--;
}
int main(){
re int l=0,r=0;
n=read();c=read();m=read();
xx=sqrt(n);
for(re int i=1;i<=n;i++){
num[i]=read();
}
for(re int i=1;i<=m;i++){
q[i].l=read();q[i].r=read();
q[i].id=i;q[i].be=q[i].l/xx+1;
}
sort(q+1,q+m+1,cmp);
for(re int i=1;i<=m;i++){
while(l<q[i].l)del(num[l++]);
while(l>q[i].l)add(num[--l]);
while(r<q[i].r)add(num[++r]);
while(r>q[i].r)del(num[r--]);
ans[q[i].id]=sum;
}
for(re int i=1;i<=m;i++){
cout << ans[i] << endl;
}
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...