Submission #991067

#TimeUsernameProblemLanguageResultExecution timeMemory
991067gggkikWall (IOI14_wall)C++14
100 / 100
639 ms112904 KiB
#include <wall.h>
#include <bits/stdc++.h>
using namespace std;
const int MXN = 2e6+5;
int t[MXN*4], lo[MXN*4], hi[MXN*4];
const int inf = 1e9;
void push(int x,int s,int e){
    if(s!=e){
        if(lo[x]!=-1e9) { 
            lo[x*2] = max(lo[x*2],lo[x]);
            hi[x*2] = max(hi[x*2],lo[x]);
            lo[x*2+1] = max(lo[x*2+1],lo[x]);
            hi[x*2+1] = max(hi[x*2+1],lo[x]);
        }
        if(hi[x]!=1e9){
            lo[x*2] = min(lo[x*2],hi[x]);
            hi[x*2] = min(hi[x*2],hi[x]);
            lo[x*2+1] = min(lo[x*2+1],hi[x]);
            hi[x*2+1] = min(hi[x*2+1],hi[x]);
        }
    }
    else {
        t[x] = max(t[x],lo[x]);
        t[x] = min(t[x],hi[x]);
    }
    lo[x] = -1e9;
    hi[x] = 1e9;
}
void upd(int x,int s,int e,int l,int r,int v,int t){
    push(x,s,e);
    if(e<l || r<s) return;
    if(l<=s && e<=r) {
        if(t==1) lo[x] = v;
        else hi[x] = v;
        
        return push(x,s,e);
    }
    int mid = s+e>>1;
    upd(x*2,s,mid,l,r,v,t), upd(x*2+1,mid+1,e,l,r,v,t);
}
int get(int x,int s,int e,int p){
    push(x,s,e);
    if(s==e) return x;
    int mid = s+e>>1;
    if(p<=mid) return get(x*2,s,mid,p);
    return get(x*2+1,mid+1,e,p);
}
void buildWall(int n, int q, int op[], int left[], int right[], int height[], int finalHeight[]){
	for(int i = 1;i<=4*n;i++) lo[i] = -1e9, hi[i] = 1e9;
    upd(1,0,n-1,0,n-1,0,1);
    upd(1,0,n-1,0,n-1,0,2);
    for(int i = 0;i<q;i++){
        int t,l,r,v;
      	t = op[i];
      	l = left[i];
      	r = right[i];
      	v = height[i];
        upd(1,0,n-1,l,r,v,t);
    }
    for(int i = 0;i<n;i++){
        int x = get(1,0,n-1,i); 
        finalHeight[i] = t[x];
    }
}

Compilation message (stderr)

wall.cpp: In function 'void upd(int, int, int, int, int, int, int)':
wall.cpp:38:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   38 |     int mid = s+e>>1;
      |               ~^~
wall.cpp: In function 'int get(int, int, int, int)':
wall.cpp:44:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   44 |     int mid = s+e>>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...