Submission #73635

#TimeUsernameProblemLanguageResultExecution timeMemory
73635TuGSGeReLWall (IOI14_wall)C++14
0 / 100
248 ms8504 KiB
#include "wall.h" #include<bits/stdc++.h> #define ll long long #define mp make_pair #define pub push_back #define pob pop_back #define ss second #define ff first #define ext exit(0) using namespace std; int o,a[2000001],lax[4000001],lam[4000001],fin[2000001]; void init(int node, int l , int r){ lam[node]=1e9; lax[node]=0; if(l==r) return; int mid=(l+r)/2; init(node*2,l,mid); init(node*2+1,mid+1,r); } void mx(int node, int h){ lax[node]=max(lax[node],h); lam[node]=max(lam[node],lax[node]); } void mn(int node, int h){ lam[node]=min(lam[node],h); lax[node]=min(lax[node],lam[node]); } void push(int node){ mx(node*2,lax[node]); mx(node*2+1,lax[node]); mn(node*2,lam[node]); mn(node*2+1,lam[node]); lax[node]=0; lam[node]=1e9; } void query(int node,int l , int r, int L , int R, int h, int o){ if(l>R || r< L) return; if(l>=L && r<=R) { if(o==1)mx(node,h); else mn(node,h); return ; } push(node); int mid=(l+r)/2; query(node*2,l,mid,L,R,h,o); query(node*2+1,mid+1,r,L,R,h,o); } void f(int node, int l , int r){ if(l==r){ fin[l]=lax[node]; return ; } int mid=(l+r)/2; f(node*2,l,mid); f(node*2+1,mid+1,r); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ init(1,0,n-1); for(int i=0;i<k;i++){ query(1,0,n-1,left[i],right[i],height[i],op[i]); } f(1,0,n-1); for(int i=0;i<n;i++) finalHeight[i]=fin[i]; return; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...