제출 #491093

#제출 시각아이디문제언어결과실행 시간메모리
491093rainboyTenis (COI19_tenis)C11
100 / 100
95 ms10056 KiB
#include <stdio.h> #include <string.h> #define N 100000 #define N_ (1 << 17) /* N_ = pow2(ceil(log2(N))) */ long long sum[N_ * 2], pref[N_ * 2]; int ii[N_ * 2], n_; void pul(int i) { int l = i << 1, r = l | 1; sum[i] = sum[l] + sum[r]; if (pref[l] <= sum[l] + pref[r]) pref[i] = pref[l], ii[i] = ii[l]; else pref[i] = sum[l] + pref[r], ii[i] = ii[r]; } void build(int *aa, int *yy, int *zz, int n) { int i; n_ = 1; while (n_ < n) n_ <<= 1; for (i = 0; i < n_; i++) pref[n_ + i] = sum[n_ + i] = i < n ? yy[aa[i]] + zz[aa[i]] - i * 2 : 0, ii[n_ + i] = i; for (i = n_ - 1; i > 0; i--) pul(i); } void update(int i, int x) { i += n_; pref[i] = sum[i] = x; while (i > 1) pul(i >>= 1); } int main() { static int aa[N], xx[N], yy[N], zz[N]; int n, q, i, j, a, b; scanf("%d%d", &n, &q); for (i = 0; i < n; i++) { scanf("%d", &aa[i]), aa[i]--; xx[aa[i]] = i; } for (i = 0; i < n; i++) { scanf("%d", &a), a--; yy[a] = i; } for (i = 0; i < n; i++) { scanf("%d", &a), a--; zz[a] = i; } build(aa, yy, zz, n); while (q--) { int t; scanf("%d", &t); if (t == 1) { scanf("%d", &a), a--; printf(xx[a] <= ii[1] ? "DA\n" : "NE\n"); } else { int tmp; scanf("%d%d%d", &t, &a, &b), a--, b--; if (t == 1) { i = xx[a], j = xx[b]; xx[a] = j, xx[b] = i; update(xx[a], yy[a] + zz[a] - xx[a] * 2), update(xx[b], yy[b] + zz[b] - xx[b] * 2); } else if (t == 2) { tmp = yy[a], yy[a] = yy[b], yy[b] = tmp; update(xx[a], yy[a] + zz[a] - xx[a] * 2), update(xx[b], yy[b] + zz[b] - xx[b] * 2); } else { tmp = zz[a], zz[a] = zz[b], zz[b] = tmp; update(xx[a], yy[a] + zz[a] - xx[a] * 2), update(xx[b], yy[b] + zz[b] - xx[b] * 2); } } } return 0; }

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

tenis.c: In function 'main':
tenis.c:42:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   42 |  scanf("%d%d", &n, &q);
      |  ^~~~~~~~~~~~~~~~~~~~~
tenis.c:44:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   44 |   scanf("%d", &aa[i]), aa[i]--;
      |   ^~~~~~~~~~~~~~~~~~~
tenis.c:48:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   48 |   scanf("%d", &a), a--;
      |   ^~~~~~~~~~~~~~~
tenis.c:52:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |   scanf("%d", &a), a--;
      |   ^~~~~~~~~~~~~~~
tenis.c:59:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |   scanf("%d", &t);
      |   ^~~~~~~~~~~~~~~
tenis.c:61:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |    scanf("%d", &a), a--;
      |    ^~~~~~~~~~~~~~~
tenis.c:66:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |    scanf("%d%d%d", &t, &a, &b), a--, b--;
      |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...