Submission #728270

# Submission time Handle Problem Language Result Execution time Memory
728270 2023-04-22T06:34:16 Z penguin133 Bitaro's travel (JOI23_travel) C++17
100 / 100
1018 ms 39236 KB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pi pair<int, int>
#define pii pair<int, pi>
#define fi first
#define se second
#ifdef _WIN32
#define getchar_unlocked _getchar_nolock
#endif
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

int n, q, X[200005], bruh[200005], P[200005];
int ans[200005], rgt[200005];

struct node{
	int s, e, m, val, val2;
	node *l, *r;
	node (int _s, int _e){
		s = _s, e = _e, m = (s + e) >> 1;
		if(s != e)l = new node(s, m), r = new node(m+1, e);
		val = val2 = 0;
	}
	
	void upd(int p, int v){
		if(s == e)val = v;
		else{
			if(p <= m)l->upd(p, v);
			else r->upd(p, v);
			val = min(l->val, r->val);
		}
	}
	
	void upd2(int p, int v){
		if(s == e)val2 = v;
		else{
			if(p <= m)l->upd2(p, v);
			else r->upd2(p, v);
			val2 = max(l->val2, r->val2);
		}
	}
	
	int qry(int a, int b){
		if(s == a && e == b)return val;
		else if(b <= m)return l->qry(a, b);
		else if(a > m)return r->qry(a, b);
		else return min(l->qry(a, m), r->qry(m+1, b));
	}
	
	int qry2(int a, int b){
		if(s == a && e == b)return val2;
		else if(b <= m)return l->qry2(a, b);
		else if(a > m)return r->qry2(a, b);
		else return max(l->qry2(a, m), r->qry2(m+1, b));
	}
}*root;

void solve(){
	cin >> n;
	for(int i=1;i<=n;i++)cin >> X[i];
	for(int i=1;i<n;i++)bruh[i] = 2 * X[i] - X[i+1], P[i+1] = 2 * X[i+1] - X[i];
	P[1] = 1e18;
	root = new node(1, n);
	for(int i=1;i<=n;i++)root->upd(i, bruh[i]), root->upd2(i, P[i]);
	for(int i=2;i<=n;i++)ans[1] += X[i] - X[i-1];
	stack <int> st;
	st.push(1);
	rgt[1] = n;
	for(int i=2;i<=n;i++){
		int lo = i, hi = n, tmp = n;
		while(lo <= hi){
			int mid = (lo + hi) >> 1;
			if(root->qry(i, mid) <= X[i-1])tmp = mid, hi = mid - 1;
			else lo = mid + 1;
		}
		rgt[i] = tmp;
		ans[i] += X[tmp] - X[i] + X[tmp] - X[i-1];
		int res = X[tmp + 1];
		if(tmp == n)ans[i] += X[i-1] - X[1];
		else{
			lo = 1, hi = i - 1, tmp = i;
			while(lo <= hi){
				int mid = (lo + hi) >> 1;
				if(root->qry2(mid, i - 1) > res)tmp = mid, lo = mid + 1;
				else hi = mid - 1;
			}
			ans[i] += X[i-1] - X[tmp] + ans[tmp];
		}
	}
	cin >> q;
	while(q--){
		int x; cin >> x;
		int lo = 1, hi = n, tmp = 0;
		while(lo <= hi){
			int mid = (lo + hi) >> 1;
			if(X[mid] <= x)tmp = mid, lo = mid + 1;
			else hi = mid - 1;
		}
		int res;
		if(!tmp)res = 1;
		else if(tmp == n)res = n;
		else res = (X[tmp+1] - x < x - X[tmp] ? tmp + 1 : tmp);
		cout << ans[res] + abs(X[res] - x) << '\n';
	}
}

main(){
	ios::sync_with_stdio(0);cin.tie(0);
	int tc = 1;
	//cin >> tc;
	for(int tc1=1;tc1<=tc;tc1++){
		// cout << "Case #" << tc1 << ": ";
		solve();
	}
}

Compilation message

travel.cpp:108:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  108 | main(){
      | ^~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 4 ms 596 KB Output is correct
3 Correct 5 ms 612 KB Output is correct
4 Correct 4 ms 596 KB Output is correct
5 Correct 4 ms 616 KB Output is correct
6 Correct 4 ms 596 KB Output is correct
7 Correct 5 ms 616 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 4 ms 596 KB Output is correct
15 Correct 5 ms 596 KB Output is correct
16 Correct 6 ms 596 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 4 ms 596 KB Output is correct
3 Correct 5 ms 612 KB Output is correct
4 Correct 4 ms 596 KB Output is correct
5 Correct 4 ms 616 KB Output is correct
6 Correct 4 ms 596 KB Output is correct
7 Correct 5 ms 616 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 4 ms 596 KB Output is correct
15 Correct 5 ms 596 KB Output is correct
16 Correct 6 ms 596 KB Output is correct
17 Correct 1018 ms 33592 KB Output is correct
18 Correct 914 ms 33612 KB Output is correct
19 Correct 976 ms 34624 KB Output is correct
20 Correct 946 ms 34080 KB Output is correct
21 Correct 944 ms 33816 KB Output is correct
22 Correct 938 ms 34764 KB Output is correct
23 Correct 963 ms 34508 KB Output is correct
24 Correct 838 ms 34256 KB Output is correct
25 Correct 840 ms 34664 KB Output is correct
26 Correct 829 ms 34412 KB Output is correct
27 Correct 836 ms 33748 KB Output is correct
28 Correct 799 ms 34620 KB Output is correct
29 Correct 948 ms 33620 KB Output is correct
30 Correct 941 ms 33832 KB Output is correct
31 Correct 926 ms 34412 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 0 ms 340 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 895 ms 36848 KB Output is correct
8 Correct 925 ms 36996 KB Output is correct
9 Correct 907 ms 36716 KB Output is correct
10 Correct 917 ms 36952 KB Output is correct
11 Correct 900 ms 36872 KB Output is correct
12 Correct 930 ms 36688 KB Output is correct
13 Correct 41 ms 3132 KB Output is correct
14 Correct 26 ms 1332 KB Output is correct
15 Correct 829 ms 35444 KB Output is correct
16 Correct 812 ms 37544 KB Output is correct
17 Correct 806 ms 37996 KB Output is correct
18 Correct 38 ms 3788 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 4 ms 596 KB Output is correct
3 Correct 5 ms 612 KB Output is correct
4 Correct 4 ms 596 KB Output is correct
5 Correct 4 ms 616 KB Output is correct
6 Correct 4 ms 596 KB Output is correct
7 Correct 5 ms 616 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 4 ms 596 KB Output is correct
15 Correct 5 ms 596 KB Output is correct
16 Correct 6 ms 596 KB Output is correct
17 Correct 1018 ms 33592 KB Output is correct
18 Correct 914 ms 33612 KB Output is correct
19 Correct 976 ms 34624 KB Output is correct
20 Correct 946 ms 34080 KB Output is correct
21 Correct 944 ms 33816 KB Output is correct
22 Correct 938 ms 34764 KB Output is correct
23 Correct 963 ms 34508 KB Output is correct
24 Correct 838 ms 34256 KB Output is correct
25 Correct 840 ms 34664 KB Output is correct
26 Correct 829 ms 34412 KB Output is correct
27 Correct 836 ms 33748 KB Output is correct
28 Correct 799 ms 34620 KB Output is correct
29 Correct 948 ms 33620 KB Output is correct
30 Correct 941 ms 33832 KB Output is correct
31 Correct 926 ms 34412 KB Output is correct
32 Correct 0 ms 340 KB Output is correct
33 Correct 0 ms 340 KB Output is correct
34 Correct 0 ms 340 KB Output is correct
35 Correct 0 ms 340 KB Output is correct
36 Correct 0 ms 340 KB Output is correct
37 Correct 0 ms 340 KB Output is correct
38 Correct 895 ms 36848 KB Output is correct
39 Correct 925 ms 36996 KB Output is correct
40 Correct 907 ms 36716 KB Output is correct
41 Correct 917 ms 36952 KB Output is correct
42 Correct 900 ms 36872 KB Output is correct
43 Correct 930 ms 36688 KB Output is correct
44 Correct 41 ms 3132 KB Output is correct
45 Correct 26 ms 1332 KB Output is correct
46 Correct 829 ms 35444 KB Output is correct
47 Correct 812 ms 37544 KB Output is correct
48 Correct 806 ms 37996 KB Output is correct
49 Correct 38 ms 3788 KB Output is correct
50 Correct 995 ms 39144 KB Output is correct
51 Correct 1018 ms 39020 KB Output is correct
52 Correct 978 ms 39072 KB Output is correct
53 Correct 881 ms 37436 KB Output is correct
54 Correct 878 ms 39236 KB Output is correct
55 Correct 857 ms 39140 KB Output is correct
56 Correct 983 ms 38428 KB Output is correct
57 Correct 969 ms 38792 KB Output is correct
58 Correct 973 ms 39068 KB Output is correct