社区讨论
关于long long
P2709【模板】莫队 / 小B的询问参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhj13hz7
- 此快照首次捕获于
- 2025/11/03 19:00 4 个月前
- 此快照最后确认于
- 2025/11/03 19:00 4 个月前
我认为如果数列的数都是一样的,那么区间 的答案就是 ,最大为 ,而 。可是我忘开
CPPlong longAC了。#include <bits/stdc++.h>
using namespace std;
int n,m,k,ans;
int B;
int a[50005];
int c[50005];
int l = 1,r = 0;
struct node
{
int l,r,id,ans;
bool operator<(const node &a)const
{
if((l+B-1)/B != (a.l+B-1)/B)
{
return (l+B-1)/B < (a.l+B-1)/B;
}
return r < a.r;
}
};
node qr[50005];
void adr()
{
r++;
c[a[r]]++;
ans += 2*c[a[r]]-1;
return;
}
void adl()
{
l--;
c[a[l]]++;
ans += 2*c[a[l]]-1;
return;
}
void der()
{
c[a[r]]--;
ans -= 2*c[a[r]]+1;
r--;
return;
}
void del()
{
c[a[l]]--;
ans -= 2*c[a[l]]+1;
l++;
return;
}
bool cmp(node x,node y)
{
return x.id < y.id;
}
int main()
{
cin >> n >> m >> k;
B = sqrt(n);
for(int i = 1;i <= n;i++)
{
cin >> a[i];
}
for(int i = 1;i <= m;i++)
{
cin >> qr[i].l >> qr[i].r;
qr[i].id = i;
}
sort(qr+1,qr+m+1);
for(int i = 1;i <= m;i++)
{
while(r < qr[i].r)
{
adr();
}
while(r > qr[i].r)
{
der();
}
while(l > qr[i].l)
{
adl();
}
while(l < qr[i].l)
{
del();
}
qr[i].ans = ans;
}
sort(qr+1,qr+m+1,cmp);
for(int i = 1;i <= m;i++)
{
cout << qr[i].ans << "\n";
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...