Submission #283743

#TimeUsernameProblemLanguageResultExecution timeMemory
283743hank55663Ancient Books (IOI17_books)C++14
50 / 100
277 ms22124 KiB
#include "books.h" #include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define pb push_back #define mp make_pair #define x first #define y second int f[1000005]; int l[1000005]; int r[1000005]; int Find(int x){ if(f[x]==x)return x; return f[x]=Find(f[x]); } int pre[1000005]; long long minimum_walk(std::vector<int> p, int s) { // vector<pii> v; long long ans=0; int Min=1e9; int over=0; for(int i = 0;i<p.size();i++){ if(p[i]!=i){ // v.pb(mp(p[i],i)); ans+=abs(p[i]-i); Min=min(Min,abs(i-s)); if((i<s&&p[i]>s)||(i>s&&p[i]<s))over=1; } l[i]=1e9; r[i]=0; f[i]=i; } for(int i = 0;i<p.size();i++){ f[Find(p[i])]=Find(i); } for(int i = 0;i<p.size();i++){ l[Find(i)]=min(l[Find(i)],i); r[Find(i)]=max(r[Find(i)],i); } vector<pii> v; for(int i = 0;i<p.size();i++){ if(f[i]==i&&l[i]!=r[i]){ v.pb(mp(l[i],r[i])); } } if(v.empty())return 0; sort(v.begin(),v.end()); int Max=v[0].x; for(auto it:v){ ans+=max(0,(it.x-Max)*2); Max=max(Max,it.y); } if(!over){ if(s>Max||s<v[0].x){ Min=max(s-Max,v[0].x-s); } else{ Min=0; } } return ans+Min*2; }

Compilation message (stderr)

books.cpp: In function 'long long int minimum_walk(std::vector<int>, int)':
books.cpp:22:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |  for(int i = 0;i<p.size();i++){
      |                ~^~~~~~~~~
books.cpp:33:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |  for(int i = 0;i<p.size();i++){
      |                ~^~~~~~~~~
books.cpp:36:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |  for(int i = 0;i<p.size();i++){
      |                ~^~~~~~~~~
books.cpp:41:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |  for(int i = 0;i<p.size();i++){
      |                ~^~~~~~~~~
#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...