Submission #69289617
Source Code Expand
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <stdlib.h>
struct elem_s {
long long tr; /* tai ryoku */
int id;
};
int cmp_elem(const struct elem_s* a, const struct elem_s* b) {
if (a->tr != b->tr) return a->tr < b->tr ? -1 : 1;
return a->id < b->id ? -1 : a->id > b->id;
}
struct pq_s {
int size, capacity;
struct elem_s* elems;
};
void pq_adjust(struct pq_s* pq, int node) {
for (;;) {
int minidx = node;
int i;
for (i = 1; i <= 2; i++) {
int c = node * 2 + i;
if (c < pq->size && cmp_elem(&pq->elems[minidx], &pq->elems[c]) > 0) minidx = c;
}
if (minidx == node) {
if (node == 0) return;
node = (node - 1) / 2;
} else {
struct elem_s tmp = pq->elems[node];
pq->elems[node] = pq->elems[minidx];
pq->elems[minidx] = tmp;
node = minidx;
}
}
}
void pq_add(struct pq_s* pq, struct elem_s elem) {
if (pq->size >= pq->capacity) {
pq->elems = realloc(pq->elems, sizeof(*pq->elems) * (pq->capacity = pq->size + 1));
if (pq->elems == NULL) exit(2);
}
pq->elems[pq->size++] = elem;
pq_adjust(pq, pq->size - 1);
}
struct elem_s pq_get(struct pq_s* pq) {
struct elem_s res;
if (pq->size <= 0) exit(42);
res = pq->elems[0];
if (--pq->size > 0) {
pq->elems[0] = pq->elems[pq->size];
pq_adjust(pq, 0);
}
return res;
}
struct pqd_s {
struct pq_s data, deleted;
};
void pqd_sousai(struct pqd_s* pqd) {
while (
pqd->data.size > 0 &&
pqd->deleted.size > 0 &&
pqd->data.elems[0].tr == pqd->deleted.elems[0].tr &&
pqd->data.elems[0].id == pqd->deleted.elems[0].id
) {
pq_get(&pqd->data);
pq_get(&pqd->deleted);
}
}
void pqd_add(struct pqd_s* pqd, struct elem_s elem) {
pq_add(&pqd->data, elem);
}
void pqd_delete(struct pqd_s* pqd, struct elem_s elem) {
pq_add(&pqd->deleted, elem);
}
int pqd_size(struct pqd_s* pqd) {
return pqd->data.size - pqd->deleted.size;
}
struct elem_s pqd_peek(struct pqd_s* pqd) {
pqd_sousai(pqd);
if (pqd->data.size <= 0) exit(42);
return pqd->data.elems[0];
}
struct elem_s pqd_get(struct pqd_s* pqd) {
pqd_sousai(pqd);
return pq_get(&pqd->data);
}
int N, Q;
int A[212345];
int event[212345], x[212345], y[212345];
struct pqd_s tr_pqd;
struct elem_s trs[212345];
int ans_cnt;
int ans[212345];
int cmp_int(const void* x, const void* y) {
int a = *(const int*)x, b = *(const int*)y;
return a < b ? -1 : a > b;
}
void sort_and_print_ans(void) {
int i;
qsort(ans, ans_cnt, sizeof(*ans), cmp_int);
printf("%d", ans_cnt);
for (i = 0; i < ans_cnt; i++) {
printf(" %d", ans[i]);
}
putchar('\n');
}
int main(void) {
int i;
long long offset = 0;
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", &event[i], &x[i], &y[i]) != 3) return 1;
}
for (i = 1; i <= N; i++) {
trs[i].tr = A[i];
trs[i].id = i;
pqd_add(&tr_pqd, trs[i]);
}
for (i = 0; i < Q; i++) {
ans_cnt = 0;
if (event[i] == 1) {
pqd_delete(&tr_pqd, trs[x[i]]);
trs[x[i]].tr += y[i];
offset -= y[i];
pqd_add(&tr_pqd, trs[x[i]]);
while (pqd_size(&tr_pqd) > 0 && pqd_peek(&tr_pqd).tr + offset <= 0) {
ans[ans_cnt++] = pqd_get(&tr_pqd).id;
}
} else if (event[i] == 2) {
pqd_delete(&tr_pqd, trs[x[i]]);
trs[x[i]].tr -= y[i];
if (trs[x[i]].tr + offset > 0) {
pqd_add(&tr_pqd, trs[x[i]]);
} else {
ans[ans_cnt++] = x[i];
}
}
sort_and_print_ans();
}
return 0;
}
Submission Info
| Submission Time |
|
| Task |
H - Attack Survival |
| User |
mikecat |
| Language |
C (gcc 12.2.0) |
| Score |
400 |
| Code Size |
3559 Byte |
| Status |
AC |
| Exec Time |
328 ms |
| Memory |
17516 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
400 / 400 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
01_example_01.txt, 01_example_02.txt |
| All |
01_example_01.txt, 01_example_02.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 03_max_01.txt, 03_max_02.txt, 03_max_03.txt, 03_max_04.txt, 03_max_05.txt, 03_max_06.txt, 03_max_07.txt, 03_max_08.txt, 03_max_09.txt, 03_max_10.txt, 04_small_01.txt, 04_small_02.txt, 04_small_03.txt, 04_small_04.txt, 04_small_05.txt, 04_small_06.txt, 04_small_07.txt, 04_small_08.txt, 04_small_09.txt, 04_small_10.txt, 05_corner_01.txt, 05_corner_02.txt, 05_corner_03.txt, 05_corner_04.txt, 05_corner_05.txt, 05_corner_06.txt, 05_corner_07.txt, 05_corner_08.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 01_example_01.txt |
AC |
1 ms |
1756 KiB |
| 01_example_02.txt |
AC |
1 ms |
1628 KiB |
| 02_random_01.txt |
AC |
173 ms |
10700 KiB |
| 02_random_02.txt |
AC |
90 ms |
5212 KiB |
| 02_random_03.txt |
AC |
75 ms |
8432 KiB |
| 02_random_04.txt |
AC |
10 ms |
2592 KiB |
| 02_random_05.txt |
AC |
137 ms |
9968 KiB |
| 02_random_06.txt |
AC |
127 ms |
8988 KiB |
| 02_random_07.txt |
AC |
162 ms |
11468 KiB |
| 02_random_08.txt |
AC |
76 ms |
9308 KiB |
| 02_random_09.txt |
AC |
247 ms |
9808 KiB |
| 02_random_10.txt |
AC |
81 ms |
4940 KiB |
| 03_max_01.txt |
AC |
326 ms |
12644 KiB |
| 03_max_02.txt |
AC |
323 ms |
12628 KiB |
| 03_max_03.txt |
AC |
328 ms |
12732 KiB |
| 03_max_04.txt |
AC |
325 ms |
12672 KiB |
| 03_max_05.txt |
AC |
327 ms |
12656 KiB |
| 03_max_06.txt |
AC |
327 ms |
12644 KiB |
| 03_max_07.txt |
AC |
79 ms |
10020 KiB |
| 03_max_08.txt |
AC |
79 ms |
10036 KiB |
| 03_max_09.txt |
AC |
140 ms |
17412 KiB |
| 03_max_10.txt |
AC |
141 ms |
17512 KiB |
| 04_small_01.txt |
AC |
126 ms |
5836 KiB |
| 04_small_02.txt |
AC |
145 ms |
6552 KiB |
| 04_small_03.txt |
AC |
86 ms |
4840 KiB |
| 04_small_04.txt |
AC |
99 ms |
5908 KiB |
| 04_small_05.txt |
AC |
123 ms |
4956 KiB |
| 04_small_06.txt |
AC |
144 ms |
5728 KiB |
| 04_small_07.txt |
AC |
111 ms |
8468 KiB |
| 04_small_08.txt |
AC |
125 ms |
7460 KiB |
| 04_small_09.txt |
AC |
126 ms |
6776 KiB |
| 04_small_10.txt |
AC |
109 ms |
4084 KiB |
| 05_corner_01.txt |
AC |
104 ms |
17516 KiB |
| 05_corner_02.txt |
AC |
105 ms |
17424 KiB |
| 05_corner_03.txt |
AC |
138 ms |
15832 KiB |
| 05_corner_04.txt |
AC |
138 ms |
15828 KiB |
| 05_corner_05.txt |
AC |
128 ms |
17420 KiB |
| 05_corner_06.txt |
AC |
130 ms |
17404 KiB |
| 05_corner_07.txt |
AC |
79 ms |
9908 KiB |
| 05_corner_08.txt |
AC |
79 ms |
10044 KiB |