제출 #52767

#제출 시각아이디문제언어결과실행 시간메모리
52767szawinis벽 (IOI14_wall)C++17
100 / 100
1115 ms355704 KiB
#include <bits/stdc++.h> using namespace std; #define fori(i, a, b) for(int i = (int) a; i <= (int) b; ++i) #define rofi(i, b, a) for(int i = (int) b; i >= (int) a; --i) #define foreach(tt, a) for(auto &tt: a) #define all(a) begin(a), end(a) #define csz(a) (int) a.size() #define pb push_back #define epb emplace_back #define mp make_pair #define load(a, v) fill(begin(a), end(a), v) #define load_mem(a, v) memset(a, v, sizeof(a)); #define iostream_optimize() ios::sync_with_stdio(false); cin.tie(0); using ll = long long; const ll MOD = 1e9+7, LINF = 1e16+1; const int INF = 1e9+1; const double EPS = 1e-10; const int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; const ll P1 = 31, P2 = 37, M1 = 1e9+7, M2 = 1e9+9; /* <<<<<<<<<<<<<<<<<<<<<<<<<<<< END TEMPLATE >>>>>>>>>>>>>>>>>>>>>>>>>>> */ #include "wall.h" const int N = 1 << 21; int mx[N << 1], mn[N << 1]; void puttag(int i, int v, int tp) { if(tp == 1) { mx[i] = max(v, mx[i]); mn[i] = max(v, mn[i]); } else { mx[i] = min(v, mx[i]); mn[i] = min(v, mn[i]); } } void apply(int i) { if(i >= N) return; puttag(i << 1, mx[i], 1); puttag(i << 1, mn[i], 2); puttag(i << 1 | 1, mx[i], 1); puttag(i << 1 | 1, mn[i], 2); mx[i] = 0, mn[i] = INF; } void update(int tl, int tr, int v, int tp, int i, int l, int r) { apply(i); if(l > tr || r < tl) return; if(tl <= l && r <= tr) { puttag(i, v, tp); return; } int mid = l+r >> 1; update(tl, tr, v, tp, i << 1, l, mid); update(tl, tr, v, tp, i << 1 | 1, mid+1, r); // cout << i << ' ' << l << ' ' << r << ' ' << mn[i] << ' ' << mx[i] << endl; } void propogate(int i, int l, int r) { apply(i); if(l == r) return; int mid = l+r >> 1; propogate(i << 1, l, mid); propogate(i << 1 | 1, mid+1, r); } void buildWall(int n, int q, int op[], int left[], int right[], int height[], int finalHeight[]) { load(mn, INF); fori(i, 0, q-1) update(left[i], right[i], height[i], op[i], 1, 0, N-1); propogate(1, 0, N-1); fori(i, 0, n-1) finalHeight[i] = mx[N+i]; // fori(i, 0, 2*N-1) cout << mn[i] << ' ' << mx[i] << endl; }

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

wall.cpp: In function 'void update(int, int, int, int, int, int, int)':
wall.cpp:52:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid = l+r >> 1;
             ~^~
wall.cpp: In function 'void propogate(int, int, int)':
wall.cpp:61:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   int mid = l+r >> 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...