Submission #618341

# Submission time Handle Problem Language Result Execution time Memory
618341 2022-08-02T04:20:00 Z sentheta Roller Coaster Railroad (IOI16_railroad) C++17
34 / 100
320 ms 70236 KB
#include"railroad.h"
#include<algorithm>
#include<iostream>
#include<cassert>
#include<vector>
#include<string>
#include<array>
#include<stack>
#include<queue>
#include<set>
#include<map>
using namespace std;

#define V vector
#define Int long long
#define rep(i,a,b) for(Int i=(Int)(a); i<(Int)(b); i++)
#define all(x) (x).begin(), (x).end()
#define nl '\n'
#define dbg(x) cout << "?" << #x << " : " << x << endl;

const Int INF = 1e18+5;
const Int N = 100;

Int n;
V<Int> s, t;

map<Int,Int> zip;
V<Int> unzip;

Int ans = 0;

#define mid ((tl+tr)/2)
#define lc (v+1)
#define rc (v+2*(mid-tl+1))
struct Segtree{
	Int st[4*N];
	void upd(Int l,Int r,Int x,Int v=0,Int tl=0,Int tr=2*N){
		if(r<tl || tr<l) return;
		if(l<=tl && tr<=r){
			st[v] += x; return;
		}
		upd(l,r,x, lc,tl,mid);
		upd(l,r,x, rc,mid+1,tr);
	}
	Int qry(Int i,Int v=0,Int tl=0,Int tr=2*N){
		if(tl==tr) return st[v];
		if(i<=mid) return st[v] + qry(i, lc,tl,mid);
		else return st[v] + qry(i, rc,mid+1,tr);
	}
} segtree;

struct Dsu{
	Int p[2*N];
	Dsu(){
		rep(i,0,2*N) p[i] = i;
	}
	Int find(Int x){
		if(p[x]==x) return x;
		return p[x] = find(p[x]);
	}
	bool same(Int x,Int y){
		return find(x)==find(y);
	}
	void unite(Int x,Int y){
		if((x=find(x))==(y=find(y))) return;
		p[x] = y;
	}
} dsu;


Int plan_roller_coaster(V<int>_s,V<int>_t){
	s = V<Int>(all(_s)); t = V<Int>(all(_t));
	s.push_back(INF); t.push_back(0);
	n = s.size();

	rep(i,0,n){
		// dbg(s[i]); dbg(t[i]);
		zip[s[i]]; zip[t[i]];
	}
	Int timer = 0;
	unzip = V<Int>(zip.size());
	for(auto&[x,y] : zip) unzip[y=timer++] = x;

	rep(i,0,n){
		s[i] = zip[s[i]];
		t[i] = zip[t[i]];
		// cout << s[i] << " " << t[i] << nl;

		if(s[i] < t[i]){
			segtree.upd(s[i],t[i]-1, 1);
		}
		if(t[i] < s[i]){
			segtree.upd(t[i],s[i]-1, -1);
		}
		dsu.unite(s[i], t[i]);
	}

	// {-w, u, v}
	priority_queue<array<Int,3>> pq;
	rep(i,0,zip.size()-1){
		pq.push({-(unzip[i+1]-unzip[i]), i+1,i});;

		Int cnt = segtree.qry(i);
		// make edge
		if(cnt != 0){
			dsu.unite(i+1, i);
		}
		// make leftward edges
		if(cnt > 0){
			// dbg(cnt);
			// dbg((unzip[i+1]-unzip[i])*cnt);
			ans += (unzip[i+1]-unzip[i])*cnt;
		}
	}


	while(!pq.empty()){
		auto[w,u,v] = pq.top(); pq.pop();
		if(dsu.same(u,v)) continue;
		w *= -1;
		// assert(0);

		ans += w;
		dsu.unite(u,v);
	}

	// dbg(ans);
	return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 0 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 0 ms 212 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 0 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 0 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 0 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 0 ms 212 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 0 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 0 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
26 Correct 0 ms 212 KB n = 8
27 Correct 0 ms 212 KB n = 8
28 Correct 0 ms 212 KB n = 8
29 Correct 0 ms 212 KB n = 16
30 Correct 0 ms 212 KB n = 16
31 Correct 0 ms 212 KB n = 16
32 Correct 1 ms 212 KB n = 16
33 Correct 1 ms 212 KB n = 16
34 Correct 0 ms 212 KB n = 16
35 Correct 0 ms 212 KB n = 16
36 Correct 0 ms 212 KB n = 15
37 Correct 0 ms 212 KB n = 8
38 Correct 0 ms 212 KB n = 16
39 Correct 0 ms 212 KB n = 16
40 Correct 0 ms 212 KB n = 9
41 Correct 1 ms 212 KB n = 16
42 Correct 1 ms 212 KB n = 16
43 Correct 1 ms 212 KB n = 16
44 Correct 0 ms 212 KB n = 9
45 Correct 0 ms 212 KB n = 15
46 Correct 0 ms 212 KB n = 16
47 Correct 0 ms 212 KB n = 16
48 Correct 0 ms 212 KB n = 16
# Verdict Execution time Memory Grader output
1 Runtime error 320 ms 70236 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB n = 2
2 Correct 0 ms 212 KB n = 2
3 Correct 0 ms 212 KB n = 2
4 Correct 0 ms 212 KB n = 2
5 Correct 0 ms 212 KB n = 2
6 Correct 0 ms 212 KB n = 2
7 Correct 0 ms 212 KB n = 3
8 Correct 1 ms 212 KB n = 3
9 Correct 0 ms 212 KB n = 3
10 Correct 0 ms 212 KB n = 8
11 Correct 0 ms 212 KB n = 8
12 Correct 1 ms 212 KB n = 8
13 Correct 0 ms 212 KB n = 8
14 Correct 0 ms 212 KB n = 8
15 Correct 0 ms 212 KB n = 8
16 Correct 1 ms 212 KB n = 8
17 Correct 0 ms 212 KB n = 8
18 Correct 0 ms 212 KB n = 8
19 Correct 0 ms 212 KB n = 3
20 Correct 0 ms 212 KB n = 7
21 Correct 1 ms 212 KB n = 8
22 Correct 0 ms 212 KB n = 8
23 Correct 0 ms 212 KB n = 8
24 Correct 0 ms 212 KB n = 8
25 Correct 1 ms 212 KB n = 8
26 Correct 0 ms 212 KB n = 8
27 Correct 0 ms 212 KB n = 8
28 Correct 0 ms 212 KB n = 8
29 Correct 0 ms 212 KB n = 16
30 Correct 0 ms 212 KB n = 16
31 Correct 0 ms 212 KB n = 16
32 Correct 1 ms 212 KB n = 16
33 Correct 1 ms 212 KB n = 16
34 Correct 0 ms 212 KB n = 16
35 Correct 0 ms 212 KB n = 16
36 Correct 0 ms 212 KB n = 15
37 Correct 0 ms 212 KB n = 8
38 Correct 0 ms 212 KB n = 16
39 Correct 0 ms 212 KB n = 16
40 Correct 0 ms 212 KB n = 9
41 Correct 1 ms 212 KB n = 16
42 Correct 1 ms 212 KB n = 16
43 Correct 1 ms 212 KB n = 16
44 Correct 0 ms 212 KB n = 9
45 Correct 0 ms 212 KB n = 15
46 Correct 0 ms 212 KB n = 16
47 Correct 0 ms 212 KB n = 16
48 Correct 0 ms 212 KB n = 16
49 Runtime error 320 ms 70236 KB Execution killed with signal 11
50 Halted 0 ms 0 KB -