제출 #610969

#제출 시각아이디문제언어결과실행 시간메모리
610969APROHACK벽 (IOI14_wall)C++14
61 / 100
3072 ms35056 KiB
#include <bits/stdc++.h> #include "wall.h" #define ll long long #define ff first #define ss second #define pb push_back using namespace std; ll N, K, blocksz; vector<ll>ans, ans2; vector<ll>values; ll block[1500][2]; // minimo, maximo void updateThis(ll blc){ for(int i = blc*blocksz ; i < (blc+1)*blocksz ; i++){ if(values[i]<=block[blc][0])values[i] = block[blc][0]; if(values[i]>=block[blc][1])values[i] = block[blc][1]; //cout << i << " = " << values[i] << endl; } block[blc][0]=0; block[blc][1]=1000000000; } void push(ll l, ll r, ll op, ll curr){ int currentBlock = l/blocksz, lastblock = r/blocksz; updateThis(currentBlock); for(int i = l ; i < min((currentBlock+1)*blocksz, r+1) ; i++){ if(op==1)values[i] = max(values[i], curr); else values[i] = min(values[i], curr); } for(int i = currentBlock+1 ; i < lastblock ; i++){ if(op==1){ if(block[i][0]<curr){ //cout<< " block" << i << " min " << curr << endl; block[i][0]=curr; block[i][1]=max(curr, block[i][1]); } }else{ if(block[i][1]>curr){ //cout<< " block" << i << " max " << curr << endl; block[i][1]=curr; block[i][0]=min(block[i][0], curr); } } } if(currentBlock == lastblock)return ; updateThis(lastblock); for(int i = lastblock*blocksz ; i <= r ; i++){ if(op==1)values[i] = max(values[i], curr); else values[i] = min(values[i], curr); //cout<<"ed " << i << " "; } //cout << endl; } void buildWall(int n, int k, int op[], int left[], int right[], int height[], int finalHeight[]){ N=n, K=k; for(int i = 0 ; i < n ; i ++){ values.pb(0); } blocksz = sqrt(n); for(int i = 0 ; i < blocksz+1 ; i++){ block[i][0]=0; block[i][1]=1000000000; } for(int i = 0 ; i < k ; i++){ push(left[i], right[i], op[i], height[i]); } for(int i = 0 ; i < blocksz +1 ; i++){ updateThis(i); } for(int i = 0 ; i < n ; i ++)finalHeight[i] = values[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...