Submission #1029538

#TimeUsernameProblemLanguageResultExecution timeMemory
102953812345678Teleporters (IOI08_teleporters)C++17
85 / 100
937 ms65536 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") using namespace std; const int nx=1e6+5; int n, m, u[nx], v[nx], p[2*nx], res, vs[nx]; set<pair<int, int>> s; priority_queue<int> pq; int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>m; for (int i=1; i<=n; i++) cin>>u[i]>>v[i], s.insert({u[i], i}), s.insert({v[i], i+n}); for (int i=1; i<=n; i++) { auto itr=s.lower_bound(make_pair(v[i]+1, 0)); if (s.lower_bound(make_pair(v[i]+1, 0))==s.end()) p[i]=-1; else p[i]=itr->second; itr=s.lower_bound(make_pair(u[i]+1, 0)); p[i+n]=itr->second; } int st=(*s.begin()).second; while (st!=-1) vs[st]=1, res++, st=p[st]; s.clear(); for (int i=1; i<=2*n; i++) { if (!vs[i]) { int sz=1, tmp=i; while (p[tmp]!=i) vs[tmp]=1, sz++, tmp=p[tmp]; vs[tmp]=1; pq.push(sz); } } while (m>0&&!pq.empty()) m--, res+=pq.top()+2, pq.pop(); res+=2*m; if (m%2) res--; cout<<res; }
#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...