제출 #473464

#제출 시각아이디문제언어결과실행 시간메모리
473464Haidara벽 (IOI14_wall)C++17
컴파일 에러
0 ms0 KiB
        #include "wall.h"
        #include<algorithm>
        using namespace std;
        const int maxn=2000001,inf=1e9+7;
        struct segtree
        {
            int mx=inf,mn=0;
        } st[maxn*4];
        bool add=0;
        void pull(int inx)
        {
            st[inx*2].mn=max(min(st[inx].mx,st[inx*2].mn),st[inx].mn);
            st[inx*2].mx=min(max(st[inx*2].mx,st[inx].mn),st[inx].mx);
            st[inx*2+1].mn=max(min(st[inx*2+1].mn,st[inx].mx),st[inx].mn);
            st[inx*2+1].mx=min(max(st[inx*2+1].mx,st[inx].mn),st[inx].mx);
            st[inx].mn=0;
            st[inx].mx=inf;
        }
        void update(int ul,int ur,int val,int l,int r,int inx=1)
        {
            if(ul<=l&&r<=ur)
            {
                if(add)
                {
                    st[inx].mn=max(st[inx].mn,val);
                    st[inx].mx=max(st[inx].mn,st[inx].mx);
                }
                else
                {
                    st[inx].mx=min(st[inx].mx,val);
                    st[inx].mn=min(st[inx].mn,st[inx].mx);
                }
                if(l!=r)
                    pull(inx);
                return ;
            }
            if(l>ur||ul>r)
                return ;
            pull(inx);
            int mid=l+(r-l)/2;
            update(ul,ur,val,l,mid,inx*2);
            update(ul,ur,val,mid+1,r,inx*2+1);
        }
        int query(int pos,int l,int r,int inx=1)
        {
            if(l==r)
                return st[inx].mn;
            int mid=l+(r-l)/2;
            pull(inx);
            if(pos<=mid)
                return query(pos,l,mid,inx*2);
            return query(pos,mid+1,r,inx*2+1);
        }
        void buildWall(int n, int k, int op[], int left[], int right[],int height[], int finalHeight[])
        {
            for(int i=0; i<k; i++)
            {
                if(op[i]==1)
                    add=1;
                else
                    add=0;
                update(left[i]+1,right[i]+1,height[i],1,n);
            }
            for(int i=0; i<n; i++)
                finalHeight[i]=query(i+1,1,n);
        }

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

Compilation timeout while compiling wall