#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define sz(a) ((int) a.size())
#define ls u << 1
#define rs u << 1 | 1
const int N = 5e5 + 15;
const int M = 4e6 + 19;
int n, k, a[N], cur = 1, b[N];
vector<int> pos[N];
ll add[M], tr[M];
int ver[M], cnt[M];
inline void push(int u, int l, int r) {
if(ver[u] != cur) {
tr[u] = cnt[u] = add[u] = 0;
ver[u] = cur;
}
int len = r - l + 1;
tr[u] += add[u] * len + (len + 1) * len / 2 * cnt[u];
if(l != r) {
int m = (l + r) / 2;
if(ver[ls] != cur) {
ver[ls] = cur;
tr[ls] = cnt[ls] = add[ls] = 0;
}
if(ver[rs] != cur) {
ver[rs] = cur;
tr[rs] = cnt[rs] = add[rs] = 0;
}
add[ls] += add[u];
add[rs] += add[u] + (m - l + 1) * cnt[u];
cnt[ls] += cnt[u];
cnt[rs] += cnt[u];
}
add[u] = cnt[u] = 0;
return;
}
void upd(int ql, int qr, int u = 1, int l = 0, int r = 2 * n) {
push(u, l, r);
if(ql > r || l > qr) return;
if(ql <= l && r <= qr) {
add[u] += l - ql;
cnt[u]++;
push(u, l, r);
return;
}
int m = (l + r) >> 1;
upd(ql, qr, ls, l, m);
upd(ql, qr, rs, m + 1, r);
tr[u] = tr[ls] + tr[rs];
}
void upd2(int ql, int qr, int x, int u = 1, int l = 0, int r = 2 * n) {
if(ql > r || l > qr) return;
push(u, l, r);
if(ql <= l && r <= qr) {
add[u] += x;
push(u, l, r);
return;
}
int m = (l + r) >> 1;
upd2(ql, qr, x, ls, l, m);
upd2(ql, qr, x, rs, m + 1, r);
tr[u] = tr[ls] + tr[rs];
}
ll get(int ql, int qr, int u = 1, int l = 0, int r = 2 * n) {
if(ql > r || l > qr || ql > qr) return 0;
push(u, l, r);
if(ql <= l && r <= qr) return tr[u];
int m = (l + r) >> 1;
return get(ql, qr, ls, l, m) + get(ql, qr, rs, m + 1, r);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> a[i];
b[i] = a[i];
}
sort(b + 1, b + n + 1);
for(int i = 1; i <= n; i++) {
a[i] = lower_bound(b + 1, b + n + 1, a[i]) - b;
pos[a[i]].pb(i);
}
ll ans = 0;
for(int i = 1; i <= n; i++) {
if(!sz(pos[i])) continue;
cur = i;
upd(-pos[i][0] + 1 + n, n);
upd2(n + 1, n + n, pos[i][0]);
for(int j = 0; j < sz(pos[i]); j++) {
int cnt = j + 1;
int ps = pos[i][j];
int nt = n + 1;
if(j != sz(pos[i]) - 1) {
nt = pos[i][j + 1];
}
ans += get((cnt << 1) - nt + n, (cnt << 1) - ps + n - 1);
upd((cnt << 1) - nt + n + 1, (cnt << 1) - ps + n);
upd2((cnt << 1) - ps + n + 1, (n << 1), nt - ps);
}
}
cout << ans << '\n';
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
11988 KB |
Output is correct |
2 |
Correct |
7 ms |
12116 KB |
Output is correct |
3 |
Correct |
7 ms |
12116 KB |
Output is correct |
4 |
Correct |
7 ms |
12108 KB |
Output is correct |
5 |
Correct |
7 ms |
12116 KB |
Output is correct |
6 |
Correct |
7 ms |
12116 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
11988 KB |
Output is correct |
2 |
Correct |
7 ms |
12116 KB |
Output is correct |
3 |
Correct |
7 ms |
12116 KB |
Output is correct |
4 |
Correct |
7 ms |
12108 KB |
Output is correct |
5 |
Correct |
7 ms |
12116 KB |
Output is correct |
6 |
Correct |
7 ms |
12116 KB |
Output is correct |
7 |
Correct |
8 ms |
12116 KB |
Output is correct |
8 |
Correct |
7 ms |
12116 KB |
Output is correct |
9 |
Correct |
10 ms |
12244 KB |
Output is correct |
10 |
Correct |
9 ms |
12244 KB |
Output is correct |
11 |
Correct |
9 ms |
12216 KB |
Output is correct |
12 |
Correct |
8 ms |
12244 KB |
Output is correct |
13 |
Correct |
9 ms |
12236 KB |
Output is correct |
14 |
Correct |
9 ms |
12220 KB |
Output is correct |
15 |
Correct |
10 ms |
12292 KB |
Output is correct |
16 |
Correct |
9 ms |
12244 KB |
Output is correct |
17 |
Correct |
10 ms |
12232 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
141 ms |
14208 KB |
Output is correct |
2 |
Correct |
194 ms |
14992 KB |
Output is correct |
3 |
Correct |
118 ms |
13880 KB |
Output is correct |
4 |
Correct |
205 ms |
14964 KB |
Output is correct |
5 |
Correct |
206 ms |
15200 KB |
Output is correct |
6 |
Correct |
223 ms |
15296 KB |
Output is correct |
7 |
Correct |
214 ms |
15316 KB |
Output is correct |
8 |
Correct |
226 ms |
15396 KB |
Output is correct |
9 |
Correct |
213 ms |
15292 KB |
Output is correct |
10 |
Correct |
210 ms |
15320 KB |
Output is correct |
11 |
Correct |
227 ms |
27356 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
11988 KB |
Output is correct |
2 |
Correct |
7 ms |
12116 KB |
Output is correct |
3 |
Correct |
7 ms |
12116 KB |
Output is correct |
4 |
Correct |
7 ms |
12108 KB |
Output is correct |
5 |
Correct |
7 ms |
12116 KB |
Output is correct |
6 |
Correct |
7 ms |
12116 KB |
Output is correct |
7 |
Correct |
8 ms |
12116 KB |
Output is correct |
8 |
Correct |
7 ms |
12116 KB |
Output is correct |
9 |
Correct |
10 ms |
12244 KB |
Output is correct |
10 |
Correct |
9 ms |
12244 KB |
Output is correct |
11 |
Correct |
9 ms |
12216 KB |
Output is correct |
12 |
Correct |
8 ms |
12244 KB |
Output is correct |
13 |
Correct |
9 ms |
12236 KB |
Output is correct |
14 |
Correct |
9 ms |
12220 KB |
Output is correct |
15 |
Correct |
10 ms |
12292 KB |
Output is correct |
16 |
Correct |
9 ms |
12244 KB |
Output is correct |
17 |
Correct |
10 ms |
12232 KB |
Output is correct |
18 |
Correct |
141 ms |
14208 KB |
Output is correct |
19 |
Correct |
194 ms |
14992 KB |
Output is correct |
20 |
Correct |
118 ms |
13880 KB |
Output is correct |
21 |
Correct |
205 ms |
14964 KB |
Output is correct |
22 |
Correct |
206 ms |
15200 KB |
Output is correct |
23 |
Correct |
223 ms |
15296 KB |
Output is correct |
24 |
Correct |
214 ms |
15316 KB |
Output is correct |
25 |
Correct |
226 ms |
15396 KB |
Output is correct |
26 |
Correct |
213 ms |
15292 KB |
Output is correct |
27 |
Correct |
210 ms |
15320 KB |
Output is correct |
28 |
Correct |
227 ms |
27356 KB |
Output is correct |
29 |
Correct |
232 ms |
28924 KB |
Output is correct |
30 |
Correct |
101 ms |
16908 KB |
Output is correct |
31 |
Correct |
230 ms |
21456 KB |
Output is correct |
32 |
Correct |
595 ms |
30992 KB |
Output is correct |
33 |
Correct |
242 ms |
21636 KB |
Output is correct |
34 |
Correct |
253 ms |
21836 KB |
Output is correct |
35 |
Correct |
172 ms |
17592 KB |
Output is correct |
36 |
Correct |
103 ms |
16636 KB |
Output is correct |
37 |
Correct |
111 ms |
17016 KB |
Output is correct |
38 |
Correct |
256 ms |
22692 KB |
Output is correct |
39 |
Correct |
242 ms |
22580 KB |
Output is correct |
40 |
Correct |
247 ms |
22716 KB |
Output is correct |
41 |
Correct |
259 ms |
22600 KB |
Output is correct |
42 |
Correct |
279 ms |
22788 KB |
Output is correct |
43 |
Correct |
282 ms |
27228 KB |
Output is correct |
44 |
Correct |
285 ms |
27236 KB |
Output is correct |
45 |
Correct |
272 ms |
27140 KB |
Output is correct |
46 |
Correct |
286 ms |
27160 KB |
Output is correct |
47 |
Correct |
279 ms |
27200 KB |
Output is correct |
48 |
Correct |
482 ms |
27664 KB |
Output is correct |
49 |
Correct |
375 ms |
27724 KB |
Output is correct |
50 |
Correct |
371 ms |
27832 KB |
Output is correct |
51 |
Correct |
335 ms |
27744 KB |
Output is correct |
52 |
Correct |
358 ms |
27704 KB |
Output is correct |
53 |
Correct |
355 ms |
27716 KB |
Output is correct |
54 |
Correct |
376 ms |
27644 KB |
Output is correct |