Submission #778800

#TimeUsernameProblemLanguageResultExecution timeMemory
778800TrumlingWall (IOI14_wall)C++14
0 / 100
102 ms8308 KiB
#include "wall.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back #define F first #define S second #define enter cout<<'\n'; #define INF 99999999999999999 #define MOD 1000000007 #define all(x) x.begin(),x.end() ll laz[8000000]; ll seg[8000000]; ll ans[3000000]; void lazy(int idx) { if(laz[idx]) return ; if(laz[idx]<0) { if(laz[idx*2]==INF) { laz[idx*2]=laz[idx]; seg[idx*2]=-laz[idx]; } else if(((laz[idx*2]<0)?-laz[idx*2]:laz[idx*2])>-laz[idx]) { laz[idx*2]=laz[idx]; seg[idx*2]=-laz[idx]; } if(laz[idx*2+1]==INF) { laz[idx*2+1]=laz[idx]; seg[idx*2+1]=-laz[idx]; } else if(((laz[idx*2+1]<0)?-laz[idx*2+1]:laz[idx*2+1])>-laz[idx]) { laz[idx*2]=laz[idx]; seg[idx*2]=-laz[idx]; } } else { if(laz[idx*2]==INF) { laz[idx*2]=laz[idx]; seg[idx*2]=laz[idx]; } else if(((laz[idx*2]<0)?-laz[idx*2]:laz[idx*2])>laz[idx]) { laz[idx*2]=laz[idx]; seg[idx*2]=laz[idx]; } if(laz[idx*2+1]==INF) { laz[idx*2+1]=laz[idx]; seg[idx*2+1]=laz[idx]; } else if(((laz[idx*2+1]<0)?-laz[idx*2+1]:laz[idx*2+1])>laz[idx]) { laz[idx*2]=laz[idx]; seg[idx*2]=laz[idx]; } } laz[idx]=INF; } void build(int l,int r,int idx) { laz[idx]=-INF; if(l==r) return ; build(l,(l+r)/2,idx*2); build((l+r)/2+1,r,idx*2+1); } void up(int l,int r,int idx,int u,int L,int R) { if(r<L || l>R) return ; if(L<=l && r<=R) { if(u<0 && seg[idx]>-u) { seg[idx]=-u; laz[idx]=u; } if(u>0 && seg[idx]<u) { seg[idx]=u; laz[idx]=u; } return ; } lazy(idx); up(l,(l+r)/2,idx*2,u,L,R); up((l+r)/2+1,r,idx*2+1,u,L,R); } void fin(int l,int r,int idx) { if(l==r) { ans[l]=seg[idx]; return; } lazy(idx); fin(l,(l+r)/2,idx*2); fin((l+r)/2+1,r,idx*2+1); } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]) { build(0,n-1,1); for(int i=0;i<k;i++) up(0,n-1,1,((op[i]==1)?height[i]:-height[i]),left[i],right[i]); fin(0,n-1,1); for(int i=0;i<n;i++) finalHeight[i]=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...