제출 #494192

#제출 시각아이디문제언어결과실행 시간메모리
494192rainboyDiversity (CEOI21_diversity)C11
22 / 100
883 ms101964 KiB
#include <stdio.h>
#include <string.h>

#define N	300000
#define A	300000
#define N_	23

long long min(long long a, long long b) { return a < b ? a : b; }

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

int aa[N];

long long solve(int l, int r) {
	static int kk[A + 1], nn[1 << N_];
	static long long dp[1 << N_];
	int n, i, a, b;

	memset(kk, 0, (A + 1) * sizeof *kk);
	for (i = l; i <= r; i++)
		kk[aa[i]]++;
	n = 0;
	for (a = 0; a <= A; a++)
		if (kk[a] > 0)
			kk[n++] = kk[a];
	nn[0] = 0;
	for (i = 0; i < n; i++)
		nn[1 << i] = kk[i];
	for (b = 1; b < 1 << n; b++)
		nn[b] = nn[b & b - 1] + nn[b & -b];
	memset(dp, 0x3f, (1 << n) * sizeof *dp), dp[0] = 0;
	for (b = 0; b < 1 << n; b++)
		for (i = 0; i < n; i++)
			if ((b & 1 << i) == 0)
				dp[b | 1 << i] = min(dp[b | 1 << i], dp[b]
						+ (f(l, r) - f(l, l + nn[b] - 1) - f(l + nn[b | 1 << i], r)));
	return dp[(1 << n) - 1];
}

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;
}

컴파일 시 표준 에러 (stderr) 메시지

diversity.c: In function 'solve':
diversity.c:32:20: warning: suggest parentheses around '-' in operand of '&' [-Wparentheses]
   32 |   nn[b] = nn[b & b - 1] + nn[b & -b];
      |                  ~~^~~
diversity.c: In function 'main':
diversity.c:45:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   45 |  scanf("%d%d", &n, &q);
      |  ^~~~~~~~~~~~~~~~~~~~~
diversity.c:47:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   47 |   scanf("%d", &aa[i]);
      |   ^~~~~~~~~~~~~~~~~~~
diversity.c:51:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |   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...