Submission #494194

#TimeUsernameProblemLanguageResultExecution timeMemory
494194rainboyDiversity (CEOI21_diversity)C11
64 / 100
7037 ms5700 KiB
#include <stdio.h>
#include <string.h>

#define N	300000
#define A	300000

long long f(int n, int n_) {
	return (long long) n * (n + 1) / 2 + (long long) (n_ - n) * (n_ - n + 1) / 2;
}

int aa[N];

long long solve(int l, int r) {
	static int kk[A + 1], cc[N + 1];
	int n, i, j, a, k;
	long long x;

	memset(kk, 0, (A + 1) * sizeof *kk);
	for (i = l; i <= r; i++)
		kk[aa[i]]++;
	memset(cc, 0, (N + 1) * sizeof *cc);
	n = 0;
	for (a = 0; a <= A; a++)
		if (kk[a] > 0)
			cc[kk[a]]++, n++;
	x = (long long) (r - l + 1) * (r - l + 2) / 2 * n;
	for (k = 1, i = 0, j = r - l + 1; k <= N; k++)
		while (cc[k] > 0 && j - i > k) {
			if (i < r - l + 1 - j)
				x -= f(i += k, r - l + 1);
			else
				x -= f(j -= k, r - l + 1);
			cc[k]--;
		}
	return x;
}

int main() {
	int n, q, i;

	scanf("%d%d", &n, &q);
	for (i = 0; i < n; i++)
		scanf("%d", &aa[i]);
	while (q--) {
		int l, r;

		scanf("%d%d", &l, &r), l--, r--;
		printf("%lld\n", solve(l, r));
	}
	return 0;
}

Compilation message (stderr)

diversity.c: In function 'main':
diversity.c:41:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   41 |  scanf("%d%d", &n, &q);
      |  ^~~~~~~~~~~~~~~~~~~~~
diversity.c:43:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   43 |   scanf("%d", &aa[i]);
      |   ^~~~~~~~~~~~~~~~~~~
diversity.c:47:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |   scanf("%d%d", &l, &r), l--, r--;
      |   ^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...