제출 #917045

#제출 시각아이디문제언어결과실행 시간메모리
917045rxlfd314벽 (IOI14_wall)C++17
100 / 100
701 ms120660 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; #define vt vector #define size(x) (int((x).size())) #define all(x) begin(x), end(x) #define REP(a, b, c, d) for (int a = (b); (d) > 0 ? a <= (c) : a >= (c); a += (d)) #define FOR(a, b, c) REP(a, b, c, 1) #define ROF(a, b, c) REP(a, b, c, -1) struct ST { vt<int> st_max, st_min, lz; ST(int n) { st_max.resize(n << 2); st_min.resize(n << 2); lz.resize(n << 2, -1); } #define lc i << 1 #define rc lc | 1 void push(int i) { if (lz[i] < 0) return; st_max[lc] = st_max[rc] = st_min[lc] = st_min[rc] = lz[lc] = lz[rc] = lz[i]; lz[i] = -1; } void pull(int i) { st_max[i] = max(st_max[lc], st_max[rc]); st_min[i] = min(st_min[lc], st_min[rc]); } void chmax(int ql, int qr, int v, int i = 1, int tl = 0, int tr = -1) { if (tr < 0) tr += size(st_max) >> 2; if (tl > qr || tr < ql || st_min[i] >= v) return; if (ql <= tl && tr <= qr && st_max[i] < v) st_max[i] = st_min[i] = lz[i] = v; else { push(i); int tm = tl + tr >> 1; chmax(ql, qr, v, lc, tl, tm); chmax(ql, qr, v, rc, tm+1, tr); pull(i); } } void chmin(int ql, int qr, int v, int i = 1, int tl = 0, int tr = -1) { if (tr < 0) tr += size(st_max) >> 2; if (tl > qr || tr < ql || st_max[i] <= v) return; if (ql <= tl && tr <= qr && st_min[i] > v) st_max[i] = st_min[i] = lz[i] = v; else { push(i); int tm = tl + tr >> 1; chmin(ql, qr, v, lc, tl, tm); chmin(ql, qr, v, rc, tm+1, tr); pull(i); } } int qry(int p, int i = 1, int tl = 0, int tr = -1) { tr += size(st_max) >> 2; while (tl < tr) { push(i); int tm = tl + tr >> 1; if (p <= tm) i = lc, tr = tm; else i = rc, tl = tm + 1; } return st_max[i]; } #undef lc #undef rc }; void buildWall(int N, int K, int op[], int left[], int right[], int height[], int finalHeight[]){ ST st(N); FOR(i, 0, K-1) { if (op[i] == 1) st.chmax(left[i], right[i], height[i]); else st.chmin(left[i], right[i], height[i]); } FOR(i, 0, N-1) finalHeight[i] = st.qry(i); }

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

wall.cpp: In member function 'void ST::chmax(int, int, int, int, int, int)':
wall.cpp:41:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   41 |       int tm = tl + tr >> 1;
      |                ~~~^~~~
wall.cpp: In member function 'void ST::chmin(int, int, int, int, int, int)':
wall.cpp:56:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   56 |       int tm = tl + tr >> 1;
      |                ~~~^~~~
wall.cpp: In member function 'int ST::qry(int, int, int, int)':
wall.cpp:66:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   66 |       int tm = tl + tr >> 1;
      |                ~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...