社区讨论
求调莫队板子
学术版参与者 7已保存回复 14
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 14 条
- 当前快照
- 1 份
- 快照标识符
- @lo9au22y
- 此快照首次捕获于
- 2023/10/28 08:23 2 年前
- 此快照最后确认于
- 2023/10/28 08:23 2 年前
P2709 全部 WA:
CPP#include <bits/stdc++.h>
using namespace std;
const int N = 5e4 + 5;
int a[N], n, m, k, cnt[N], len, ans[N];
struct Node
{
int id, l, r, p;
}q[N];
inline bool cmp(register const Node &a, register const Node &b)
{
if (a.p != b.p) return a.p < b.p;
return (a.p & 1 ? a.r < b.r : a.r > b.r);
}
inline void add(const int &x, int &res)
{
res -= cnt[a[x]] * cnt[a[x]];
cnt[a[x]]++;
res += cnt[a[x]] * cnt[a[x]];
}
inline void del(const int &x, int &res)
{
res -= cnt[a[x]] * cnt[a[x]];
cnt[a[x]]--;
res += cnt[a[x]] * cnt[a[x]];
}
int main()
{
scanf("%d %d %d", &n, &m, &k);
len = pow(n, 0.54);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 0; i < m; i++)
{
int l, r;
scanf("%d %d", &l, &r);
q[i] = { i, l, r, l / len };
}
sort(q, q + m, cmp);
int nl = 1, nr = 0;
for (int i = 0; i < m; i++)
{
int id = q[i].id, l = q[i].l, r = q[i].r, res = 0;
while (nl < l) del(nl++, res);
while (nl > l) add(--nl, res);
while (nr < r) add(++nr, res);
while (nr > r) del(nr--, res);
ans[id] = res;
}
for (int i = 0; i < m; i++) printf("%d\n", ans[i]);
return 0;
}
回复
共 14 条回复,欢迎继续交流。
正在加载回复...