제출 #429619

#제출 시각아이디문제언어결과실행 시간메모리
429619Amylopectin벽 (IOI14_wall)C++14
100 / 100
963 ms77332 KiB
#include <iostream> #include <stdio.h> #include "wall.h" //#include "grader.cpp" using namespace std; const int mxn = 8e6 + 10,mxi = 1e7 + 10; struct we { int bb,ub; }; struct we se[mxn] = {}; int ban[mxn] = {}; int fimi(int l,int r) { if(l < r) return l; return r; } int fima(int l,int r) { if(l > r) return l; return r; } int cre(int cl,int cr,int no) { if(cl == cr) { se[no] = {0,0}; return 0; } int mid = (cl+cr) / 2; se[no] = {0,mxi}; cre(cl,mid,no*2); cre(mid+1,cr,no*2+1); return 0; } int ins(int cl,int cr,int no,int tl,int tr,int iva,int uob,int dob,int dou) { if(cr < tl || cl > tr) { if(dob > se[no].ub) { se[no].bb = dob; se[no].ub = dob; } else if(dou < se[no].bb) { se[no].bb = dou; se[no].ub = dou; } else { se[no].bb = fima(dob,se[no].bb); se[no].ub = fimi(dou,se[no].ub); } return 0; } if(cl >= tl && cr <= tr) { if(dob > se[no].ub) { se[no].bb = dob; se[no].ub = dob; } else if(dou < se[no].bb) { se[no].bb = dou; se[no].ub = dou; } else { se[no].bb = fima(dob,se[no].bb); se[no].ub = fimi(dou,se[no].ub); } // se[no].bb = fima(dob,se[no].bb); // se[no].ub = fimi(dou,se[no].ub); if(uob == 1) { if(iva > se[no].ub) { se[no].bb = iva; se[no].ub = iva; } else { se[no].bb = fima(iva,se[no].bb); } } else { if(iva < se[no].bb) { se[no].bb = iva; se[no].ub = iva; } else { se[no].ub = fimi(iva,se[no].ub); } } return 0; } int mid = (cl+cr) / 2; if(dob > se[no].ub) { dou = dob; } else if(dou < se[no].bb) { dob = dou; } else { dob = fima(dob,se[no].bb); dou = fimi(dou,se[no].ub); } se[no].bb = 0; se[no].ub = mxi; ins(cl,mid,no*2,tl,tr,iva,uob,dob,dou); ins(mid+1,cr,no*2+1,tl,tr,iva,uob,dob,dou); return 0; } int las(int cl,int cr,int no,int dob,int dou) { if(cl == cr) { if(dob > se[no].ub) { se[no].bb = dob; se[no].ub = dob; } else if(dou < se[no].bb) { se[no].bb = dou; se[no].ub = dou; } else { se[no].bb = fima(dob,se[no].bb); se[no].ub = fimi(dou,se[no].ub); } ban[cl] = se[no].bb; return 0; } int mid = (cl+cr) / 2; if(dob > se[no].ub) { dou = dob; } else if(dou < se[no].bb) { dob = dou; } else { dob = fima(dob,se[no].bb); dou = fimi(dou,se[no].ub); } se[no].bb = dob; se[no].ub = dou; las(cl,mid,no*2,dob,dou); las(mid+1,cr,no*2+1,dob,dou); return 0; } void buildWall(int n, int k, int op[], int le[], int ri[], int ahei[], int ans[]) { int i,j; cre(0,n-1,1); for(i=0; i<k; i++) { ins(0,n-1,1,le[i],ri[i],ahei[i],op[i],0,mxi); } las(0,n-1,1,0,mxi); for(i=0; i<n; i++) { ans[i] = ban[i]; } return; } //int main() //{ // cout << "Hello world!" << endl; // return 0; //}

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

wall.cpp: In function 'void buildWall(int, int, int*, int*, int*, int*, int*)':
wall.cpp:168:11: warning: unused variable 'j' [-Wunused-variable]
  168 |     int i,j;
      |           ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...