# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
390627 | 2021-04-16T12:19:17 Z | mehrdad_sohrabi | Ancient Books (IOI17_books) | C++14 | 1062 ms | 74004 KB |
#include <bits/stdc++.h> #include "books.h" using namespace std; typedef long long int ll; typedef complex<double> point; typedef long double ld; #define pb push_back #define pii pair < ll , ll > #define F first #define S second //#define endl '\n' #define int long long #define sync ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0) #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math") #define kill(x) return cout<<x<<'\n', 0; const int N=1e6+10,inf=(ll)1e9; ll vis[N]; pii seg[N*4]; pii ba[N]; ll E[N]; void upd(ll nod,ll l,ll r,ll id,pii val){ ba[id]=val; if (r-l==1){ seg[nod]=val; return ; } ll mid=(r+l)/2; if (mid>id) upd(nod*2,l,mid,id,val); else upd(nod*2+1,mid,r,id,val); seg[nod].F=min(seg[nod*2].F,seg[nod*2+1].F); seg[nod].S=max(seg[nod*2].S,seg[nod*2+1].S); } pii get(ll nod,ll l,ll r,ll L,ll R){ if (l>=R || L>=r) return {inf,0}; if (l>=L && r<=R) return seg[nod]; ll mid=(r+l)/2; pii a=get(nod*2,l,mid,L,R); pii b=get(nod*2+1,mid,r,L,R); return {min(a.F,b.F),max(a.S,b.S)}; } long long minimum_walk(std::vector<int32_t> p, int32_t s) { memset(vis,0,sizeof vis); vector <pii> baz; ll n=p.size(); ll ans=0; for (int i=0;i<n;i++){ // cout << i << " rf" << endl; if (vis[i]) continue; if (p[i]==i){ upd(1,0,n,i,{i,i}); continue; } ll mn=i,mx=i; ll j=p[i]; ans+=abs(p[i]-i); while(j!=i){ ans+=abs(p[j]-j); // cout << j << " " << p[j] << endl; mn=min(mn,j); mx=max(mx,j); vis[j]=1; j=p[j]; } j=p[i]; while(j!=i){ upd(1,0,n,j,{mn,mx}); j=p[j]; } upd(1,0,n,i,{mn,mx}); vis[i]=1; baz.pb({mn,-mx}); } // cout << ans << endl; sort(baz.begin(),baz.end()); vector <pii> a; if (baz.size()){ a.pb(baz[0]); for (auto u : a){ for (int i=u.F;i<=u.S;i++){ E[i]++; } } for (int i=1;i<baz.size();i++){ pii p=baz[i],q=a.back(); if (-p.S<=-q.S) continue; if (p.F<=-q.S){ a.pop_back(); q.S=p.S; a.pb(q); } else a.pb(baz[i]); } ll p1=0; if (a[0].F>s){ ans+=(a[0].F-s)*2; p1=1; } if (-a.back().S<s){ ans+=(s+a.back().S)*2; p1=1; } if (p1==0 && E[s]!=0){ pii b={s,s}; while(true){ while(true){ pii z=b; for (int i=z.F;i<=z.S;i++) z.F=min(z.F,ba[i].F),z.S=max(z.S,ba[i].S); if (z!=b) b=z; else break; } ll z=lower_bound(a.begin(),a.end(),pii({b.F,-inf}))-a.begin(); // cout << b.F << " dc " << b.S << endl; if (z==a.size() || a[z].F!=b.F){ b.F--; b.S++; ans+=2; } else break; } } for (int i=1;i<a.size();i++){ ans+=(a[i].F+a[i-1].S)*2; } } return ans; } /* int32_t main() { int32_t n, s; assert(2 == scanf("%d %d", &n, &s)); vector<int32_t> p((unsigned) n); for(int i = 0; i < n; i++) assert(1 == scanf("%d", &p[(unsigned) i])); long long res = minimum_walk(p, s); printf("%lld\n", res); return 0; } */ /* 4 0 0 2 3 1 4 2 1 3 2 0 */
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 8140 KB | Output is correct |
2 | Correct | 5 ms | 8140 KB | Output is correct |
3 | Correct | 4 ms | 8140 KB | Output is correct |
4 | Correct | 4 ms | 8140 KB | Output is correct |
5 | Correct | 5 ms | 8140 KB | Output is correct |
6 | Correct | 5 ms | 8140 KB | Output is correct |
7 | Correct | 4 ms | 8140 KB | Output is correct |
8 | Correct | 4 ms | 8140 KB | Output is correct |
9 | Correct | 4 ms | 8140 KB | Output is correct |
10 | Correct | 4 ms | 8140 KB | Output is correct |
11 | Correct | 4 ms | 8140 KB | Output is correct |
12 | Correct | 4 ms | 8140 KB | Output is correct |
13 | Correct | 4 ms | 8140 KB | Output is correct |
14 | Correct | 4 ms | 8140 KB | Output is correct |
15 | Correct | 4 ms | 8140 KB | Output is correct |
16 | Correct | 4 ms | 8140 KB | Output is correct |
17 | Correct | 4 ms | 8140 KB | Output is correct |
18 | Correct | 4 ms | 8140 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 8140 KB | Output is correct |
2 | Correct | 5 ms | 8140 KB | Output is correct |
3 | Correct | 4 ms | 8140 KB | Output is correct |
4 | Correct | 4 ms | 8140 KB | Output is correct |
5 | Correct | 5 ms | 8140 KB | Output is correct |
6 | Correct | 5 ms | 8140 KB | Output is correct |
7 | Correct | 4 ms | 8140 KB | Output is correct |
8 | Correct | 4 ms | 8140 KB | Output is correct |
9 | Correct | 4 ms | 8140 KB | Output is correct |
10 | Correct | 4 ms | 8140 KB | Output is correct |
11 | Correct | 4 ms | 8140 KB | Output is correct |
12 | Correct | 4 ms | 8140 KB | Output is correct |
13 | Correct | 4 ms | 8140 KB | Output is correct |
14 | Correct | 4 ms | 8140 KB | Output is correct |
15 | Correct | 4 ms | 8140 KB | Output is correct |
16 | Correct | 4 ms | 8140 KB | Output is correct |
17 | Correct | 4 ms | 8140 KB | Output is correct |
18 | Correct | 4 ms | 8140 KB | Output is correct |
19 | Correct | 6 ms | 8148 KB | Output is correct |
20 | Correct | 4 ms | 8140 KB | Output is correct |
21 | Correct | 5 ms | 8140 KB | Output is correct |
22 | Correct | 6 ms | 8144 KB | Output is correct |
23 | Correct | 6 ms | 8140 KB | Output is correct |
24 | Correct | 4 ms | 8140 KB | Output is correct |
25 | Correct | 5 ms | 8140 KB | Output is correct |
26 | Correct | 4 ms | 8140 KB | Output is correct |
27 | Correct | 4 ms | 8140 KB | Output is correct |
28 | Correct | 4 ms | 8140 KB | Output is correct |
29 | Correct | 4 ms | 8140 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 8140 KB | Output is correct |
2 | Correct | 5 ms | 8140 KB | Output is correct |
3 | Correct | 4 ms | 8140 KB | Output is correct |
4 | Correct | 4 ms | 8140 KB | Output is correct |
5 | Correct | 5 ms | 8140 KB | Output is correct |
6 | Correct | 5 ms | 8140 KB | Output is correct |
7 | Correct | 4 ms | 8140 KB | Output is correct |
8 | Correct | 4 ms | 8140 KB | Output is correct |
9 | Correct | 4 ms | 8140 KB | Output is correct |
10 | Correct | 4 ms | 8140 KB | Output is correct |
11 | Correct | 4 ms | 8140 KB | Output is correct |
12 | Correct | 4 ms | 8140 KB | Output is correct |
13 | Correct | 4 ms | 8140 KB | Output is correct |
14 | Correct | 4 ms | 8140 KB | Output is correct |
15 | Correct | 4 ms | 8140 KB | Output is correct |
16 | Correct | 4 ms | 8140 KB | Output is correct |
17 | Correct | 4 ms | 8140 KB | Output is correct |
18 | Correct | 4 ms | 8140 KB | Output is correct |
19 | Correct | 6 ms | 8148 KB | Output is correct |
20 | Correct | 4 ms | 8140 KB | Output is correct |
21 | Correct | 5 ms | 8140 KB | Output is correct |
22 | Correct | 6 ms | 8144 KB | Output is correct |
23 | Correct | 6 ms | 8140 KB | Output is correct |
24 | Correct | 4 ms | 8140 KB | Output is correct |
25 | Correct | 5 ms | 8140 KB | Output is correct |
26 | Correct | 4 ms | 8140 KB | Output is correct |
27 | Correct | 4 ms | 8140 KB | Output is correct |
28 | Correct | 4 ms | 8140 KB | Output is correct |
29 | Correct | 4 ms | 8140 KB | Output is correct |
30 | Correct | 1020 ms | 64452 KB | Output is correct |
31 | Correct | 1062 ms | 64444 KB | Output is correct |
32 | Correct | 490 ms | 64380 KB | Output is correct |
33 | Correct | 507 ms | 73512 KB | Output is correct |
34 | Correct | 510 ms | 73720 KB | Output is correct |
35 | Correct | 518 ms | 74004 KB | Output is correct |
36 | Correct | 497 ms | 70188 KB | Output is correct |
37 | Correct | 488 ms | 65028 KB | Output is correct |
38 | Correct | 494 ms | 64732 KB | Output is correct |
39 | Correct | 488 ms | 64548 KB | Output is correct |
40 | Correct | 525 ms | 64480 KB | Output is correct |
41 | Correct | 787 ms | 64416 KB | Output is correct |
42 | Correct | 726 ms | 64436 KB | Output is correct |
43 | Correct | 502 ms | 68412 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Incorrect | 6 ms | 8140 KB | 3rd lines differ - on the 1st token, expected: '3304', found: '2744' |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 8140 KB | Output is correct |
2 | Correct | 5 ms | 8140 KB | Output is correct |
3 | Correct | 4 ms | 8140 KB | Output is correct |
4 | Correct | 4 ms | 8140 KB | Output is correct |
5 | Correct | 5 ms | 8140 KB | Output is correct |
6 | Correct | 5 ms | 8140 KB | Output is correct |
7 | Correct | 4 ms | 8140 KB | Output is correct |
8 | Correct | 4 ms | 8140 KB | Output is correct |
9 | Correct | 4 ms | 8140 KB | Output is correct |
10 | Correct | 4 ms | 8140 KB | Output is correct |
11 | Correct | 4 ms | 8140 KB | Output is correct |
12 | Correct | 4 ms | 8140 KB | Output is correct |
13 | Correct | 4 ms | 8140 KB | Output is correct |
14 | Correct | 4 ms | 8140 KB | Output is correct |
15 | Correct | 4 ms | 8140 KB | Output is correct |
16 | Correct | 4 ms | 8140 KB | Output is correct |
17 | Correct | 4 ms | 8140 KB | Output is correct |
18 | Correct | 4 ms | 8140 KB | Output is correct |
19 | Correct | 6 ms | 8148 KB | Output is correct |
20 | Correct | 4 ms | 8140 KB | Output is correct |
21 | Correct | 5 ms | 8140 KB | Output is correct |
22 | Correct | 6 ms | 8144 KB | Output is correct |
23 | Correct | 6 ms | 8140 KB | Output is correct |
24 | Correct | 4 ms | 8140 KB | Output is correct |
25 | Correct | 5 ms | 8140 KB | Output is correct |
26 | Correct | 4 ms | 8140 KB | Output is correct |
27 | Correct | 4 ms | 8140 KB | Output is correct |
28 | Correct | 4 ms | 8140 KB | Output is correct |
29 | Correct | 4 ms | 8140 KB | Output is correct |
30 | Correct | 1020 ms | 64452 KB | Output is correct |
31 | Correct | 1062 ms | 64444 KB | Output is correct |
32 | Correct | 490 ms | 64380 KB | Output is correct |
33 | Correct | 507 ms | 73512 KB | Output is correct |
34 | Correct | 510 ms | 73720 KB | Output is correct |
35 | Correct | 518 ms | 74004 KB | Output is correct |
36 | Correct | 497 ms | 70188 KB | Output is correct |
37 | Correct | 488 ms | 65028 KB | Output is correct |
38 | Correct | 494 ms | 64732 KB | Output is correct |
39 | Correct | 488 ms | 64548 KB | Output is correct |
40 | Correct | 525 ms | 64480 KB | Output is correct |
41 | Correct | 787 ms | 64416 KB | Output is correct |
42 | Correct | 726 ms | 64436 KB | Output is correct |
43 | Correct | 502 ms | 68412 KB | Output is correct |
44 | Incorrect | 6 ms | 8140 KB | 3rd lines differ - on the 1st token, expected: '3304', found: '2744' |
45 | Halted | 0 ms | 0 KB | - |