Submission #574327

#TimeUsernameProblemLanguageResultExecution timeMemory
574327mosiashvililukaWall (IOI14_wall)C++14
100 / 100
794 ms93800 KiB
#include<bits/stdc++.h>
#include "wall.h"
using namespace std;
const int N=100009;
int a,b,c,d,e,i,j,ii,jj,zx,xc,ans[2000009],tes,t,tp,l,r,zl,zr,za,segl[8000009],segr[8000009],segt[8000009];
void CHANGE(int rr, int l, int r, int t){
    if(t!=N){
        segl[rr]=-N;segr[rr]=N;segt[rr]=t;
        return;
    }
    if(segt[rr]!=N){
        segt[rr]=max(segt[rr],l);
        segt[rr]=min(segt[rr],r);
        return;
    }
    if(l>segr[rr]){
        segl[rr]=-N;segr[rr]=N;segt[rr]=l;
        return;
    }
    if(r<segl[rr]){
        segl[rr]=-N;segr[rr]=N;segt[rr]=r;
        return;
    }
    segl[rr]=max(segl[rr],l);
    segr[rr]=min(segr[rr],r);
}
void pushdown(int q, int w, int rr){
    CHANGE(rr*2,segl[rr],segr[rr],segt[rr]);
    CHANGE(rr*2+1,segl[rr],segr[rr],segt[rr]);
    segl[rr]=-N;segr[rr]=N;segt[rr]=N;
}
void upd(int q, int w, int rr){
    if(q>r||w<l) return;
    if(q>=l&&w<=r){
        CHANGE(rr,zl,zr,N);
        return;
    }
    pushdown(q,w,rr);
    upd(q,(q+w)/2,rr*2);
    upd((q+w)/2+1,w,rr*2+1);
}
void buildWall(int Nn, int Kk, int Oop[], int Lleft[], int Rright[], int Hheight[], int finalHeight[]){
    a=Nn;tes=Kk;
    za=1;
    while(za<a) za*=2;
    for(i=0; i<=za*2; i++){
        segl[i]=-N;segr[i]=N;segt[i]=N;
    }
    for(t=1; t<=tes; t++){
        tp=Oop[t-1];
        if(tp==2){
            l=Lleft[t-1]+1;r=Rright[t-1]+1;zl=-N;zr=Hheight[t-1];
            upd(1,za,1);
        }else{
            l=Lleft[t-1]+1;r=Rright[t-1]+1;zl=Hheight[t-1];zr=N;
            upd(1,za,1);
        }
    }
    for(i=1; i<=a; i++){
        c=za+i-1;zx=0;
        while(c!=0){
            if(segt[c]!=N){
                zx=segt[c];
                c/=2;
                continue;
            }
            zx=max(zx,segl[c]);
            zx=min(zx,segr[c]);
            c/=2;
        }
        ans[i]=zx;
    }
    //
    for(i=1; i<=a; i++){
        finalHeight[i-1]=ans[i];
    }
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...