Submission #581487

#TimeUsernameProblemLanguageResultExecution timeMemory
581487jasminWall (IOI14_wall)C++17
32 / 100
888 ms43172 KiB
#include<wall.h> #include<bits/stdc++.h> using namespace std; const int inf=1e9; void buildWallsmall(int n, int k, signed op[], signed left[], signed right[], signed hight[], signed finalHight[]){ for(int i=0; i<k; i++){ for(int j=left[i]; j<=right[i]; j++){ if(op[i]==1){ finalHight[j]=max(finalHight[j], hight[i]); } else{ finalHight[j]=min(finalHight[j], hight[i]); } } } } void buildWall2(int n, int k, signed op[], signed left[], signed right[], signed hight[], signed finalHight[]){ vector<vector<pair<int,int> > > add1(n); vector<vector<pair<int,int> > >add2(n); vector<vector<pair<int,int> > > sub1(n); vector<vector<pair<int,int> > > sub2(n); for(int i=0; i<k; i++){ if(op[i]==1){ add1[left[i]].push_back({hight[i], i}); add2[right[i]].push_back({hight[i], i}); } else{ sub1[left[i]].push_back({hight[i], i}); sub2[right[i]].push_back({hight[i], i}); } } set<pair<int,int> > active; for(int i=0; i<n; i++){ for(auto e: add1[i]){ active.insert(e); } int h=0; if(!active.empty()){ h=(*prev(active.end())).first; } finalHight[i]=h; for(auto e: add2[i]){ active.erase(e); } } active.clear(); for(int i=0; i<n; i++){ for(auto e: sub1[i]){ active.insert(e); } int h=inf; if(!active.empty()){ h=(*active.begin()).first; } finalHight[i]=min(finalHight[i], h); for(auto e: sub2[i]){ active.erase(e); } } } void buildWall(int n, int k, signed op[], signed left[], signed right[], signed hight[], signed finalHight[]){ if(n<=(int)1e4){ buildWallsmall(n, k, op, left, right, hight, finalHight); return; } buildWall2(n, k, op, left, right, hight, finalHight); } /*signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); }*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...