Submission #1030457

# Submission time Handle Problem Language Result Execution time Memory
1030457 2024-07-22T05:26:25 Z vjudge1 Ancient Books (IOI17_books) C++17
12 / 100
1 ms 432 KB
#include "books.h"
#include<bits/stdc++.h>
#include <queue>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); i++)
#define rng(i,l,r) for(int i=(l); i<(r); i++)
#define all(x) x.begin(),x.end()
using ll=long long;
const int INF=INT_MAX>>1;

struct SegTree{

	using T=pair<int,int>;
	T op(T x,T y){
		return {min(x.first,y.first),max(x.second,y.second)};
	}
	T e(){
		return {INF,-INF};
	}

	vector<T> tree;
	int size;
	SegTree(int sz):size(sz){
		tree.resize(size*2,e());
	}
	inline T get(int pos){
		return tree[pos+size];
	}
	inline void set(int pos,T val){
		tree[pos+size]=val;
	}
	T prod(int lf,int ri){
		lf+=size;
		ri+=size;
		T rl=e();
		T rr=e();
		while(lf<ri){
			if(lf&1){
				rl=op(rl,tree[lf]);
				lf++;
			}
			if(ri&1){
				ri--;
				rr=op(tree[ri],rr);
			}
			lf>>=1;
			ri>>=1;
		}
		return op(rl,rr);
	}
};

long long minimum_walk(std::vector<int> p, int s) {
	int n=p.size();
	vector<int> vis(n,-1);
	vector<pair<int,int>> wide;
	int cnt=0;
	ll ans=0;
	rep(i,n){
		if(vis[i]>=0)continue;
		if(p[i]==i&&i!=s)continue;
		int lf=i;
		int ri=i;
		int pos=i;
		while(vis[p[pos]]==-1){
			ans+=abs(pos-p[pos]);
			pos=p[pos];
			vis[pos]=cnt;
			lf=min(lf,pos);
			ri=max(ri,pos);
		}
		cnt++;
		wide.emplace_back(lf,ri);
	}
	vector<int> dist(cnt,INF);
	dist[vis[s]]=0;
	SegTree seg(n);
	rep(i,n){
		if(vis[i]!=-1)seg.set(i,{i,i});
	}
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq;
	pq.push({0,vis[s]});
	while(!pq.empty()){
		int dis,pos;
		tie(dis,pos)=pq.top();
		pq.pop();
		if(dist[pos]!=dis)continue;
		int lf,ri;
		tie(lf,ri)=wide[pos];
		while(true){
			int nxt=seg.prod(lf+1,ri).first;
			if(nxt>n)break;
			seg.set(nxt,seg.e());
			if(dist[vis[nxt]]>dis){
				dist[vis[nxt]]=dis;
				pq.push({dist[vis[nxt]],vis[nxt]});
			}
		}
		int nxt;
		nxt=seg.prod(0,lf).first;
		if(nxt<n){
			if(dist[vis[nxt]]>dis+abs(nxt-lf)){
				dist[vis[nxt]]=dis+abs(nxt-lf);
				pq.push({dist[vis[nxt]],vis[nxt]});
			}
		}
		nxt=seg.prod(ri+1,n).second;
		if(nxt>=0){
			if(dist[vis[nxt]]>dis+abs(nxt-ri)){
				dist[vis[nxt]]=dis+abs(nxt-ri);
				pq.push({dist[vis[nxt]],vis[nxt]});
			}
		}
	}
	for(ll i:dist)ans+=i*2;
	return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 432 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 432 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Incorrect 0 ms 348 KB 3rd lines differ - on the 1st token, expected: '338572', found: '15032724096'
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 432 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Incorrect 0 ms 348 KB 3rd lines differ - on the 1st token, expected: '338572', found: '15032724096'
20 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB 3rd lines differ - on the 1st token, expected: '3304', found: '386547059024'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 432 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 1 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Incorrect 0 ms 348 KB 3rd lines differ - on the 1st token, expected: '338572', found: '15032724096'
20 Halted 0 ms 0 KB -