社区讨论
0pts莫队求调
P2709【模板】莫队 / 小B的询问参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo2owell
- 此快照首次捕获于
- 2023/10/23 17:22 2 年前
- 此快照最后确认于
- 2023/10/23 17:22 2 年前
rt,全TLE求调qwq
CPP#include<bits/stdc++.h>
using namespace std;
#define Maxn 50005
#define int long long
struct query{
int l,r,k;
}q[Maxn];
int n,m,k,lx=1,rx=0,a[Maxn];
int book[Maxn],bsize;
int res,ans[Maxn];
bool cmp(query x,query y){
int u=book[x.l],v=book[y.l];
if(u==v) return x.r<y.r;
return u<v;
}
map<int,int> mp;
void Add(int x){
res+=mp[x]*2+1;
mp[x]++;
}
void Sub(int x){
res-=mp[x]*2-1;
mp[x]--;
}
inline int read()
{
register int x = 0, f = 1;
register char c = getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c<='9'&&c>='0'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
signed main(){
n=read();
m=read();
k=read();
bsize=sqrt(n);
for(int i=1;i<=n;i++){
a[i]=read();
book[i]=i/bsize+1;
}
for(int i=0;i<m;i++){
q[i].l=read();q[i].r=read();
q[i].k=i;
}
sort(q,q+m,cmp);
for(int i=0;i<m;i++){
while(q[i].l<lx) Add(a[--lx]);
while(q[i].r<rx) Sub(a[rx--]);
while(q[i].l>lx) Sub(a[lx++]);
while(q[i].r>rx) Add(a[++rx]);
ans[q[i].k]=res;
}
for(int i=0;i<m;i++){
printf("%d\n",ans[i]);
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...