Submission #71971094


Source Code Expand

Copy
#include <stdio.h>
#include <stdlib.h>
#define INF 1010101010
#define KI_MAX (1 << 19) /* 524288 */
struct minmax_s {
int min, max;
};
struct minmax_s merge(struct minmax_s a, struct minmax_s b) {
return (struct minmax_s){
a.min <= b.min ? a.min : b.min,
a.max >= b.max ? a.max : b.max
};
}
struct minmax_s ki[KI_MAX * 2 - 1];
void ki_set(int pos, int value) {
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <stdlib.h>

#define INF 1010101010

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

struct minmax_s {
	int min, max;
};

struct minmax_s merge(struct minmax_s a, struct minmax_s b) {
	return (struct minmax_s){
		a.min <= b.min ? a.min : b.min,
		a.max >= b.max ? a.max : b.max
	};
}

struct minmax_s ki[KI_MAX * 2 - 1];

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

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

struct minmax_s ki_get(int qs, int qe) {
	return ki_get_i(0, 0, KI_MAX, qs, qe);
}

int cmp(const void* x, const void* y) {
	int a = *(const int*)x, b = *(const int*)y;
	return (a > b) - (a < b);
}

int zac;
int zal[KI_MAX];

int zaq(int query) {
	int l = 0, r = zac - 1;
	while (l <= r) {
		int m = l + (r - l) / 2;
		if (zal[m] == query) return m;
		else if (zal[m] < query) l = m + 1; else r = m - 1;
	}
	printf("ERROR: %d not found!\n", query);
	exit(72);
}

int N;
int C[KI_MAX], X[KI_MAX];

int left[KI_MAX], right[KI_MAX];

int main(void) {
	int i;
	if (scanf("%d", &N) != 1) return 1;
	for (i = 0; i < N; i++) {
		if (scanf("%d%d", &C[i], &X[i]) != 2) return 1;
		zal[i] = X[i];
	}
	zal[N] = -INF;
	zal[N + 1] = INF * 2;
	qsort(zal, N + 2, sizeof(*zal), cmp);
	for (i = 1, zac = 1; i < N + 2; i++) {
		if (zal[i] != zal[zac - 1]) zal[zac++] = zal[i];
	}
	for (i = 0; i < (int)(sizeof(ki) / sizeof(*ki)); i++) {
		ki[i] = (struct minmax_s){ INF, -INF };
	}
	ki_set(zaq(-INF), -1);
	ki_set(zaq(INF * 2), -1);
	for (i = 0; i < N; i++) {
		ki_set(zaq(X[i]), C[i]);
	}
	for (i = 0; i < zac; i++) left[i] = INF;
	for (i = 1; i < zac - 1; i++) {
		int no = i - 1, yes = zac - 1;
		while (no + 1 < yes) {
			int m = no + (yes - no) / 2;
			struct minmax_s minmax = ki_get(i, m + 1);
			if (minmax.min != minmax.max) yes = m; else no = m;
		}
		right[i] = left[yes] = zal[yes] - zal[i];
	}
	/* 左と同じ国のため、左にブロックされて来なかった所を埋める */
	for (i = 1; i < zac - 1; i ++) {
		if (left[i] >= INF && left[i - 1] < INF) left[i] = left[i - 1] + (zal[i] - zal[i - 1]);
	}
	for (i = 0; i < N; i++) {
		int pos = zaq(X[i]);
		printf("%d\n", left[pos] <= right[pos] ? left[pos] : right[pos]);
	}
	return 0;
}

/*

セグメント木で国の最小と最大を管理する
最小または最大が自分の出身国と異なる → 自分と違う出身国の選手が居る

→ TLEしたので、もうひと工夫
左(位置が小さい)の選手から見て右の選手の距離 → 右の選手から見て左の選手の距離も同じ
なので、右→左の探索は省略できる

*/

Submission Info

Submission Time
Task C - 座席 2 (Seats 2)
User mikecat
Language C23 (GCC 14.2.0)
Score 100
Code Size 3243 Byte
Status AC
Exec Time 1098 ms
Memory 17276 KiB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3
Score / Max Score 0 / 0 20 / 20 40 / 40 40 / 40
Status
AC × 3
AC × 28
AC × 32
AC × 74
Set Name Test Cases
Sample sample-01.txt, sample-02.txt, sample-03.txt
Subtask1 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, sample-01.txt, sample-02.txt, sample-03.txt
Subtask2 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, sample-01.txt, sample-02.txt, sample-03.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-25.txt
Subtask3 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, 03-15.txt, 03-16.txt, 03-17.txt, 03-18.txt, 03-19.txt, 03-20.txt, 03-21.txt, 03-22.txt, 03-23.txt, sample-01.txt, sample-02.txt, sample-03.txt
Case Name Status Exec Time Memory
01-01.txt AC 5 ms 9916 KiB
01-02.txt AC 5 ms 9984 KiB
01-03.txt AC 4 ms 9900 KiB
01-04.txt AC 5 ms 9856 KiB
01-05.txt AC 5 ms 9920 KiB
01-06.txt AC 5 ms 9920 KiB
01-07.txt AC 5 ms 9888 KiB
01-08.txt AC 5 ms 10012 KiB
01-09.txt AC 4 ms 9940 KiB
01-10.txt AC 4 ms 10028 KiB
01-11.txt AC 4 ms 9984 KiB
01-12.txt AC 5 ms 9916 KiB
01-13.txt AC 4 ms 9972 KiB
01-14.txt AC 5 ms 9760 KiB
01-15.txt AC 4 ms 9984 KiB
01-16.txt AC 5 ms 10116 KiB
01-17.txt AC 4 ms 9968 KiB
01-18.txt AC 4 ms 10024 KiB
01-19.txt AC 4 ms 9964 KiB
01-20.txt AC 5 ms 9876 KiB
01-21.txt AC 5 ms 9964 KiB
01-22.txt AC 5 ms 10060 KiB
01-23.txt AC 5 ms 9920 KiB
01-24.txt AC 4 ms 9792 KiB
01-25.txt AC 4 ms 9836 KiB
02-01.txt AC 534 ms 13172 KiB
02-02.txt AC 984 ms 15820 KiB
02-03.txt AC 520 ms 13276 KiB
02-04.txt AC 989 ms 15836 KiB
02-05.txt AC 376 ms 14244 KiB
02-06.txt AC 112 ms 13452 KiB
02-07.txt AC 82 ms 13496 KiB
02-08.txt AC 60 ms 13456 KiB
02-09.txt AC 993 ms 15948 KiB
02-10.txt AC 112 ms 13516 KiB
02-11.txt AC 1009 ms 16280 KiB
02-12.txt AC 112 ms 13472 KiB
02-13.txt AC 1035 ms 16684 KiB
02-14.txt AC 112 ms 13520 KiB
02-15.txt AC 1098 ms 17232 KiB
02-16.txt AC 113 ms 13408 KiB
02-17.txt AC 80 ms 15160 KiB
02-18.txt AC 72 ms 15012 KiB
02-19.txt AC 874 ms 16780 KiB
02-20.txt AC 699 ms 16628 KiB
02-21.txt AC 846 ms 15816 KiB
02-22.txt AC 802 ms 15360 KiB
02-23.txt AC 67 ms 13496 KiB
03-01.txt AC 878 ms 15124 KiB
03-02.txt AC 990 ms 15840 KiB
03-03.txt AC 150 ms 10972 KiB
03-04.txt AC 988 ms 15840 KiB
03-05.txt AC 421 ms 12656 KiB
03-06.txt AC 984 ms 15816 KiB
03-07.txt AC 875 ms 15208 KiB
03-08.txt AC 986 ms 15748 KiB
03-09.txt AC 997 ms 16012 KiB
03-10.txt AC 117 ms 13460 KiB
03-11.txt AC 1014 ms 16276 KiB
03-12.txt AC 117 ms 13520 KiB
03-13.txt AC 1042 ms 16684 KiB
03-14.txt AC 117 ms 13476 KiB
03-15.txt AC 1090 ms 17276 KiB
03-16.txt AC 119 ms 13492 KiB
03-17.txt AC 78 ms 15176 KiB
03-18.txt AC 79 ms 15172 KiB
03-19.txt AC 712 ms 16476 KiB
03-20.txt AC 710 ms 16692 KiB
03-21.txt AC 694 ms 15016 KiB
03-22.txt AC 749 ms 15208 KiB
03-23.txt AC 76 ms 13548 KiB
sample-01.txt AC 4 ms 9876 KiB
sample-02.txt AC 4 ms 9988 KiB
sample-03.txt AC 4 ms 9856 KiB


2025-12-26 (Fri)
08:19:40 +09:00