Submission #73434995


Source Code Expand

Copy
#include <stdio.h>
#include <inttypes.h>
#define KI_MAX (1 << 19) /* 524288 */
/* addsum */
void ki_add(int64_t ki[], int pos, int64_t value) {
pos += KI_MAX - 1;
ki[pos] += value;
do {
pos = (pos - 1) / 2;
ki[pos] = ki[pos * 2 + 1] + ki[pos * 2 + 2];
} while (pos > 0);
}
int64_t ki_sum_i(const int64_t ki[], int idx, int ss, int se, int qs, int qe) {
if (se <= qs || qe <= ss) { /* */
return 0;
} else if (qs <= ss && se <= qe) { /* */
return ki[idx];
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <inttypes.h>

#define KI_MAX (1 << 19) /* 524288 */

/* 点add、範囲sum */

void ki_add(int64_t ki[], int pos, int64_t value) {
	pos += KI_MAX - 1;
	ki[pos] += value;
	do {
		pos = (pos - 1) / 2;
		ki[pos] = ki[pos * 2  + 1] + ki[pos * 2 + 2];
	} while (pos > 0);
}

int64_t ki_sum_i(const int64_t ki[], int idx, int ss, int se, int qs, int qe) {
	if (se <= qs || qe <= ss) { /* 完全に外れている */
		return 0;
	} else if (qs <= ss && se <= qe) { /* セグメントがクエリに完全に含まれる */
		return ki[idx];
	} else {
		int sm = ss + (se - ss) / 2;
		return
			ki_sum_i(ki, idx * 2 + 1, ss, sm, qs, qe) +
			ki_sum_i(ki, idx * 2 + 2, sm, se, qs, qe);
	}
}

int64_t ki_sum(const int64_t ki[], int qs, int qe) {
	return ki_sum_i(ki, 0, 0, KI_MAX, qs, qe);
}

int N, Q;
int A[512345];
int query[212345][3];

int64_t num_ki[KI_MAX * 2 - 1], sum_ki[KI_MAX * 2 - 1];

int main(void) {
	int i;
	if (scanf("%d%d", &N, &Q) != 2) return 1;
	for (i = 1; i <= N; i++) {
		if (scanf("%d", &A[i]) != 1) return 1;
	}
	for (i = 0; i < Q; i++) {
		if (scanf("%d%d%d", &query[i][0], &query[i][1], &query[i][2]) != 3) return 1;
	}

	for (i = 1; i <= N; i++) {
		ki_add(num_ki, A[i], 1);
		ki_add(sum_ki, A[i], A[i]);
	}
	for (i = 0; i < Q; i++) {
		if (query[i][0] == 1) {
			int x = query[i][1], y = query[i][2];
			ki_add(num_ki, A[x], -1);
			ki_add(sum_ki, A[x], -A[x]);
			A[x] = y;
			ki_add(num_ki, A[x], 1);
			ki_add(sum_ki, A[x], A[x]);
		} else if (query[i][0] == 2) {
			int l = query[i][1], r = query[i][2];
			printf("%" PRId64 "\n",
				l <= r ? (
					ki_sum(num_ki, 0, l) * l +
					ki_sum(sum_ki, l, r + 1) +
					ki_sum(num_ki, r + 1, KI_MAX) * r
				) : (
					(int64_t)l * N
				)
			);
		}
	}

	return 0;
}

Submission Info

Submission Time
Task E - Clamp
User mikecat
Language C23 (GCC 14.2.0)
Score 450
Code Size 1841 Byte
Status AC
Exec Time 338 ms
Memory 23000 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 450 / 450
Status
AC × 2
AC × 21
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 02_handmade_00.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 0 ms 1864 KiB
00_sample_01.txt AC 0 ms 1716 KiB
01_random_00.txt AC 204 ms 19620 KiB
01_random_01.txt AC 280 ms 21520 KiB
01_random_02.txt AC 188 ms 19984 KiB
01_random_03.txt AC 100 ms 18824 KiB
01_random_04.txt AC 338 ms 21672 KiB
01_random_05.txt AC 294 ms 21720 KiB
01_random_06.txt AC 299 ms 21736 KiB
01_random_07.txt AC 304 ms 21640 KiB
01_random_08.txt AC 302 ms 23000 KiB
01_random_09.txt AC 304 ms 22396 KiB
01_random_10.txt AC 301 ms 21864 KiB
01_random_11.txt AC 306 ms 21616 KiB
01_random_12.txt AC 292 ms 21684 KiB
01_random_13.txt AC 288 ms 21612 KiB
01_random_14.txt AC 295 ms 22260 KiB
01_random_15.txt AC 262 ms 22376 KiB
01_random_16.txt AC 1 ms 1864 KiB
01_random_17.txt AC 110 ms 19744 KiB
02_handmade_00.txt AC 188 ms 7304 KiB


2026-02-20 (Fri)
08:05:50 +09:00