Submission #999020

#TimeUsernameProblemLanguageResultExecution timeMemory
999020huutuanTeleporters (IOI08_teleporters)C++14
10 / 100
141 ms51240 KiB
#include<bits/stdc++.h>

using namespace std;

const int N=2e6+10;
int jump[N], cnt[N], nxt[N], add[N];
int n, m;

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   memset(jump, -1, sizeof jump);
   cin >> n >> m;
   for (int i=1; i<=n; ++i){
      int u, v; cin >> u >> v;
      jump[u]=v; jump[v]=u;
   }
   nxt[N-1]=N;
   for (int i=N-2; i>=0; --i){
      if (jump[i]!=-1) nxt[i]=i;
      else nxt[i]=nxt[i+1];
   }
   int ans=0, pos=0;
   while (1){
      if (pos==N) break;
      pos=nxt[pos];
      if (pos==N) break;
      ++cnt[min(pos, jump[pos])];
      pos=jump[pos]+1;
      ++ans;
   }
   int lst=-1;
   for (int i=1; i<N; ++i) if (cnt[i]==1){
      assert(i>lst);
      lst=jump[i];
      add[i]=3;
      for (int j=i+1; j<jump[i]; ++j) if (jump[j]!=-1 && jump[j]>j && cnt[j]==0 && jump[j]<jump[i]) ++add[i];
   }
   sort(add, add+N, greater<int>());
   for (int i=0; i<N; ++i) if (add[i] && m){
      --m;
      ans+=add[i];
   }
   while (m){
      --m; ++ans;
      if (m) --m, ans+=3;
   }
   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...