Submission #956668

# Submission time Handle Problem Language Result Execution time Memory
956668 2024-04-02T09:57:25 Z TAhmed33 Diversity (CEOI21_diversity) C++
Compilation error
0 ms 0 KB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize ("trapv")
typedef long long ll;
const int B = 500;
int a[MAXN], n, q;
array <int, 3> queries[MAXN];
ll ans[MAXN];
int freq[MAXN], freq2[MAXN];
set <int> t;
void add (int x) {
	if (freq2[freq[a[x]]] == 1) t.erase(freq[a[x]]);
	freq2[freq[a[x]]]--;
	freq[a[x]]++;
	freq2[freq[a[x]]]++;	
	if (freq2[freq[a[x]]] == 1) t.insert(freq[a[x]]);
}
void rem (int x) {
	if (freq2[freq[a[x]]] == 1) t.erase(freq[a[x]]);
	freq2[freq[a[x]]]--;
	freq[a[x]]--;
	freq2[freq[a[x]]]++;
	if (freq2[freq[a[x]]] == 1) t.insert(freq[a[x]]);
}
int main () {
	ios::sync_with_stdio(0); cin.tie(0);
	cin >> n >> q;
	freq2[0] = MAXN; t.insert(0);
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= q; i++) {
		int l, r; cin >> l >> r;
		queries[i] = {l, r, i};
	}
	sort(queries + 1, queries + q + 1, [&] (array <int, 3> &x, array <int, 3> &y) {
		return x[0] / B == y[0] / B ? x[1] < y[1] : x[0]  / B < y[0] / B;
	});
	int L = queries[0][1] + 1, R = queries[0][1];
	for (int i = 1; i <= q; i++) {
		while (L > queries[i][0]) add(--L);
		while (L < queries[i][0]) rem(L++);
		while (R > queries[i][1]) rem(R--);
		while (R < queries[i][1]) add(++R);
		ll dis = 0, n = R - L + 1;
		vector <pair <ll, ll>> pp[2];
		int c = 0;
		for (auto j : t) {
			if (j) {
				dis += freq2[j];
				int x = j, y = freq2[j];
				if (y == 1) {
					pp[c].push_back({x, 1});
					c ^= 1; continue;
				}
				int l = (y + 1) / 2, r = y / 2;
				pp[c].push_back({x, l});
				pp[c ^ 1].push_back({x, r});
				c ^= (y & 1);
			}
		}
		reverse(pp[1].begin(), pp[1].end());
		for (auto j : pp[1]) pp[0].push_back(j);
		ll cur = 0, cur2 = 0, pref = 0;
		for (auto [x, y] : pp[0]) {
			cur2 += pref * pref * y + y * (y - 1) / 2 * 2 * pref * x + x * x * (y - 1) * y * (2 * y - 1) / 6 + y * pref + x * y * (y - 1) / 2;
			cur += y * n * n - y * n * pref - n * y * (y + 1) / 2 * x + y * n;
			cur += -y * n * pref + pref * pref * y + pref * y * (y + 1) / 2 * x - y * pref;
			cur += -n * y * (y + 1) / 2 * x + y * (y + 1) / 2 * x * pref + x * x * y * (y + 1) * (2 * y + 1) / 6 - y * (y + 1) / 2 * x;
			pref += x * y;
		}	
		ans[queries[i][2]] = n * (n + 1) / 2 * dis - cur / 2 - cur2 / 2;
	}
	for (int i = 1; i <= q; i++) cout << ans[i] << '\n';
}

Compilation message

diversity.cpp:6:7: error: 'MAXN' was not declared in this scope
    6 | int a[MAXN], n, q;
      |       ^~~~
diversity.cpp:7:24: error: 'MAXN' was not declared in this scope
    7 | array <int, 3> queries[MAXN];
      |                        ^~~~
diversity.cpp:8:8: error: 'MAXN' was not declared in this scope
    8 | ll ans[MAXN];
      |        ^~~~
diversity.cpp:9:10: error: 'MAXN' was not declared in this scope
    9 | int freq[MAXN], freq2[MAXN];
      |          ^~~~
diversity.cpp:9:23: error: 'MAXN' was not declared in this scope
    9 | int freq[MAXN], freq2[MAXN];
      |                       ^~~~
diversity.cpp: In function 'void add(int)':
diversity.cpp:12:6: error: 'freq2' was not declared in this scope
   12 |  if (freq2[freq[a[x]]] == 1) t.erase(freq[a[x]]);
      |      ^~~~~
diversity.cpp:12:12: error: 'freq' was not declared in this scope; did you mean 'free'?
   12 |  if (freq2[freq[a[x]]] == 1) t.erase(freq[a[x]]);
      |            ^~~~
      |            free
diversity.cpp:12:17: error: 'a' was not declared in this scope
   12 |  if (freq2[freq[a[x]]] == 1) t.erase(freq[a[x]]);
      |                 ^
diversity.cpp:13:2: error: 'freq2' was not declared in this scope
   13 |  freq2[freq[a[x]]]--;
      |  ^~~~~
diversity.cpp:13:8: error: 'freq' was not declared in this scope; did you mean 'free'?
   13 |  freq2[freq[a[x]]]--;
      |        ^~~~
      |        free
diversity.cpp:13:13: error: 'a' was not declared in this scope
   13 |  freq2[freq[a[x]]]--;
      |             ^
diversity.cpp: In function 'void rem(int)':
diversity.cpp:19:6: error: 'freq2' was not declared in this scope
   19 |  if (freq2[freq[a[x]]] == 1) t.erase(freq[a[x]]);
      |      ^~~~~
diversity.cpp:19:12: error: 'freq' was not declared in this scope; did you mean 'free'?
   19 |  if (freq2[freq[a[x]]] == 1) t.erase(freq[a[x]]);
      |            ^~~~
      |            free
diversity.cpp:19:17: error: 'a' was not declared in this scope
   19 |  if (freq2[freq[a[x]]] == 1) t.erase(freq[a[x]]);
      |                 ^
diversity.cpp:20:2: error: 'freq2' was not declared in this scope
   20 |  freq2[freq[a[x]]]--;
      |  ^~~~~
diversity.cpp:20:8: error: 'freq' was not declared in this scope; did you mean 'free'?
   20 |  freq2[freq[a[x]]]--;
      |        ^~~~
      |        free
diversity.cpp:20:13: error: 'a' was not declared in this scope
   20 |  freq2[freq[a[x]]]--;
      |             ^
diversity.cpp: In function 'int main()':
diversity.cpp:28:2: error: 'freq2' was not declared in this scope
   28 |  freq2[0] = MAXN; t.insert(0);
      |  ^~~~~
diversity.cpp:28:13: error: 'MAXN' was not declared in this scope
   28 |  freq2[0] = MAXN; t.insert(0);
      |             ^~~~
diversity.cpp:29:38: error: 'a' was not declared in this scope
   29 |  for (int i = 1; i <= n; i++) cin >> a[i];
      |                                      ^
diversity.cpp:32:3: error: 'queries' was not declared in this scope
   32 |   queries[i] = {l, r, i};
      |   ^~~~~~~
diversity.cpp:34:7: error: 'queries' was not declared in this scope
   34 |  sort(queries + 1, queries + q + 1, [&] (array <int, 3> &x, array <int, 3> &y) {
      |       ^~~~~~~
diversity.cpp:41:10: error: 'R' was not declared in this scope
   41 |   while (R > queries[i][1]) rem(R--);
      |          ^
diversity.cpp:42:10: error: 'R' was not declared in this scope
   42 |   while (R < queries[i][1]) add(++R);
      |          ^
diversity.cpp:43:19: error: 'R' was not declared in this scope
   43 |   ll dis = 0, n = R - L + 1;
      |                   ^
diversity.cpp:63:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   63 |   for (auto [x, y] : pp[0]) {
      |             ^
diversity.cpp:70:3: error: 'ans' was not declared in this scope; did you mean 'abs'?
   70 |   ans[queries[i][2]] = n * (n + 1) / 2 * dis - cur / 2 - cur2 / 2;
      |   ^~~
      |   abs
diversity.cpp:72:39: error: 'ans' was not declared in this scope; did you mean 'abs'?
   72 |  for (int i = 1; i <= q; i++) cout << ans[i] << '\n';
      |                                       ^~~
      |                                       abs