rt,莫队块长老问题
被hack代码:
//# pragma GCC optimize("Ofast,no-stack-protector")
//
//# pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
# include <bits/stdc++.h>
# define I return
# define AK 0
# define IOI ;
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
int n, m, len, a[50005], pie[50005], c[50005], l = 1, r;
ll sum, ans[50005];
struct node {
int l, r, id;
bool operator < (const node& x) const {
return pie[l] != pie[x.l] ? pie[l] < pie[x.l] : pie[l] & 1 ? r > x.r : r < x.r;
}
} q[50005];
void add (const int x) {
sum += c[a[x]] * 2 + 1;
++ c[a[x]];
return ;
}
void del (const int x) {
sum -= c[a[x]] * 2 - 1;
-- c[a[x]];
return ;
}
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> n >> m >> len;
len = n / sqrt (m);
for (int i = 1; i <= n; ++ i)
cin >> a[i], pie[i] = i / len;
for (int i = 0; i < m; ++ i)
cin >> q[i].l >> q[i].r, q[i].id = i;
sort (q, q + m);
for (int i = 0; i < m; ++ i) {
while (l > q[i].l)
add (-- l);
while (r < q[i].r)
add (++ r);
while (l < q[i].l)
del (l ++);
while (r > q[i].r)
del (r --);
ans[q[i].id] = sum;
}
for (int i = 0; i < m; ++ i)
cout << ans[i] << '\n';
I AK IOI
}
hack.in:
1 2 1
1
1 1
1 1
hack.out
1
1
被hack代码会re,原因是块长len=n/sqrt(m)=0