Submission #410449

#TimeUsernameProblemLanguageResultExecution timeMemory
410449JasiekstrzTeleporters (IOI08_teleporters)C++17
100 / 100
793 ms65536 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int N=1e6; struct Point { int x,id; bool en; Point(int _x=0,int _id=0,int _en=0) : x(_x),id(_id),en(_en) {}; bool operator<(const Point &oth) const { return x<oth.x; } }; array<int,2> t[N+10]; vector<Point>::iterator pos[N+10][2]; bool vis[N+10][2]; vector<Point> st; vector<int> siz; int dfs(vector<Point>::iterator x) { int ans=0; while(x!=st.end() && !vis[(x->id)][(x->en)]) { vis[(x->id)][(x->en)]=true; ans++; x=next(pos[(x->id)][!(x->en)]); } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>t[i][0]>>t[i][1]; st.push_back(Point(t[i][0],i,0)); st.push_back(Point(t[i][1],i,1)); } sort(st.begin(),st.end()); for(auto it=st.begin();it!=st.end();it++) pos[(it->id)][(it->en)]=it; int ans=dfs(st.begin()); for(int i=1;i<=n;i++) { for(int j:{0,1}) { if(!vis[i][j]) siz.push_back(dfs(pos[i][j])); } } sort(siz.begin(),siz.end()); while(m--) { if(siz.empty()) { ans++; siz.push_back(1); } else { ans+=2+siz.back(); siz.pop_back(); } } cout<<ans<<"\n"; return 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...