Submission #385363

#TimeUsernameProblemLanguageResultExecution timeMemory
385363alireza_kavianiWall (IOI14_wall)C++11
100 / 100
1139 ms140396 KiB
#include <bits/stdc++.h> #include "wall.h" using namespace std; typedef pair<int, int> pii; #define X first #define Y second #define lc id << 1 #define rc lc | 1 const int MAXN = 2e6 + 10; const int MOD = 1e9 + 7; int N , ans[MAXN] , mx[MAXN << 2] , mn[MAXN << 2]; pii lz[MAXN << 2]; void apply(int id , pii val){ mx[id] = max(mx[id] , val.X); mx[id] = min(mx[id] , val.Y); mn[id] = max(mn[id] , val.X); mn[id] = min(mn[id] , val.Y); if(val.X >= lz[id].Y) lz[id] = {val.X , val.X}; else lz[id].X = max(lz[id].X , val.X); lz[id].Y = min(lz[id].Y , val.Y); } void minimize(int ql , int qr , int x , int id = 1 , int l = 0 , int r = N){ if(qr <= l || r <= ql) return; if(ql <= l && r <= qr){ apply(id , {0 , x}); return; } apply(lc , lz[id]); apply(rc , lz[id]); lz[id] = {0 , MOD}; int mid = l + r >> 1; minimize(ql , qr , x , lc , l , mid); minimize(ql , qr , x , rc , mid , r); mn[id] = min(mn[lc] , mn[rc]); mx[id] = max(mx[lc] , mx[rc]); } void maximize(int ql , int qr , int x , int id = 1 , int l = 0 , int r = N){ if(qr <= l || r <= ql) return; if(ql <= l && r <= qr){ apply(id , {x , MOD}); return; } apply(lc , lz[id]); apply(rc , lz[id]); lz[id] = {0 , MOD}; int mid = l + r >> 1; maximize(ql , qr , x , lc , l , mid); maximize(ql , qr , x , rc , mid , r); mn[id] = min(mn[lc] , mn[rc]); mx[id] = max(mx[lc] , mx[rc]); } void solve(int id = 1 , int l = 0 , int r = N){ if(r - l == 1){ // cout << mx[id] << ' ' << mn[id] << endl; ans[l] = mx[id]; return; } apply(lc , lz[id]); apply(rc , lz[id]); int mid = l + r >> 1; solve(lc , l , mid); solve(rc , mid , r); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ fill(lz , lz + MAXN * 4 , pii(0 , MOD)); N = n; for(int i = 0 ; i < k ; i++){ if(op[i] == 1){ maximize(left[i] , right[i] + 1 , height[i]); } if(op[i] == 2){ minimize(left[i] , right[i] + 1 , height[i]); } } solve(); for(int i = 0 ; i < n ; i++) finalHeight[i] = ans[i]; return; }

Compilation message (stderr)

wall.cpp: In function 'void minimize(int, int, int, int, int, int)':
wall.cpp:34:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   34 |  int mid = l + r >> 1;
      |            ~~^~~
wall.cpp: In function 'void maximize(int, int, int, int, int, int)':
wall.cpp:49:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   49 |  int mid = l + r >> 1;
      |            ~~^~~
wall.cpp: In function 'void solve(int, int, int)':
wall.cpp:64:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   64 |  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...