답안 #385119

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
385119 2021-04-03T08:20:31 Z Return_0 Pinball (JOI14_pinball) C++17
100 / 100
463 ms 27876 KB
#pragma GCC optimize("Ofast,unroll-loops")
// #pragma comment(linker, "/stack:200000000")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma,tune=native")

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef long long ll;
typedef long double ld;
typedef pair <ll, ll> pll;

#ifdef SINA
#define dbg(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char* name, Arg1&& arg1) { cout << name << " : " << arg1 << std::endl; }
template <typename Arg1, typename... Args> void __f (const char* names, Arg1&& arg1, Args&&... args) {
	const char* comma = strchr(names + 1, ',');cout.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...); }
#define dbg2(x, j, n) cout<< #x << " : "; output((j), (n), x, 1); cout.flush();
#else
#define dbg(...) 0
#define dbg2(x, j, n) 0
#endif
#define SZ(x) ((ll)((x).size()))
#define File(s, t) freopen(s ".txt", "r", stdin); freopen(t ".txt", "w", stdout);
#define input(j, n, a) for (int _i = (j); _i < (n)+(j); _i++) cin>> a[_i];
#define output(j, n, a, t) for (int _i = (j); _i < (n)+(j); _i++) cout<< a[_i] << (((t) && _i != (n)+(j)-1)? ' ' : '\n');
#define kill(x) return cout<< (x) << endl, 0
#define cl const ll
#define fr first
#define sc second
#define lc (v << 1)
#define rc (lc | 1)
#define mid ((l + r) >> 1)
#define All(x) (x).begin(), (x).end()

cl inf = sizeof(ll) == 4 ? (1e9 + 10) : (3e18), mod = 1e9 + 7, MOD = 998244353;

template <class A,class B> ostream& operator << (ostream& out,const pair<A,B>&a){return out<<'('<<a.first<<", "<<a.second<<')';}
template <class A> ostream& operator << (ostream& out, const vector<A> &a) {
	out<< '['; for (int i = -1; ++i < int(a.size());) out<< a[i] << (i + 1 < int(a.size()) ? ", " : ""); return out<<']'; }
template <class T, typename _t = less <T> > using Tree = tree <T, null_type, _t, rb_tree_tag, tree_order_statistics_node_update>;

cl N = 1e5 + 7;

ll a [N], b [N], c [N], d [N], dp [N], ans, n, m;
vector <ll> cmprs;

struct segtree {
	ll l, r, mn;
	segtree *lt, *rt;
	inline segtree (cl &L = 1, cl &R = N - 2) : l(L), r(R), mn(inf) {}

	void build () {
		if (l == r) return;
		lt = new segtree (l, mid);
		rt = new segtree (mid + 1, r);
		lt->build();
		rt->build();
	}

	void upd (cl &pos, cl &x) {
		if (l == r) {
			mn = min(mn, x);
			return;
		}
		if (pos <= lt->r) lt->upd(pos, x);
		else rt->upd(pos, x);
		mn = min(lt->mn, rt->mn);
	}

	ll ask (cl &ql, cl &qr) {
		if (r < ql || qr < l)   return inf;
		if (ql <= l && r <= qr) return mn;
		return min(lt->ask(ql, qr), rt->ask(ql, qr));
	}
} seg1, segn;

int main ()
{
	ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	memset(dp, 63, sizeof dp);

	cin>> m >> n;
	cmprs = {1, n};
	for (ll i = 1; i <= m; i++) {
		cin>> a[i] >> b[i] >> c[i] >> d[i];
		cmprs.push_back(c[i]);
	}

	sort(All(cmprs)); cmprs.resize(unique(All(cmprs)) - cmprs.begin());
	seg1.r = SZ(cmprs); seg1.build(); seg1.upd(1, 0);
	segn.r = SZ(cmprs); segn.build(); segn.upd(SZ(cmprs), 0);

	for (ll i = 1, mn1, mnn; i <= m; i++) {
		a[i] = lower_bound(All(cmprs), a[i]) - cmprs.begin() + 1;
		b[i] = upper_bound(All(cmprs), b[i]) - cmprs.begin();
		c[i] = upper_bound(All(cmprs), c[i]) - cmprs.begin();
		mn1 = seg1.ask(a[i], b[i]); mnn = segn.ask(a[i], b[i]);
		dp[c[i]] = min(dp[c[i]], mn1 + mnn + d[i]);
		seg1.upd(c[i], mn1 + d[i]); segn.upd(c[i], mnn + d[i]);
	}

	ans = *min_element(dp, dp + N);
	if (ans >= inf) ans = -1;
	cout<< ans << endl;

	cerr<< "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";

	return 0;
}
/*
5 6
2 4 3 5
1 2 2 8
3 6 5 2
4 6 4 7
2 4 3 10

3 5
2 4 3 10
1 3 1 20
2 5 4 30

*/
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1132 KB Output is correct
2 Correct 2 ms 1132 KB Output is correct
3 Correct 2 ms 1132 KB Output is correct
4 Correct 2 ms 1132 KB Output is correct
5 Correct 2 ms 1132 KB Output is correct
6 Correct 2 ms 1132 KB Output is correct
7 Correct 2 ms 1132 KB Output is correct
8 Correct 2 ms 1132 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1132 KB Output is correct
2 Correct 2 ms 1132 KB Output is correct
3 Correct 2 ms 1132 KB Output is correct
4 Correct 2 ms 1132 KB Output is correct
5 Correct 2 ms 1132 KB Output is correct
6 Correct 2 ms 1132 KB Output is correct
7 Correct 2 ms 1132 KB Output is correct
8 Correct 2 ms 1132 KB Output is correct
9 Correct 2 ms 1132 KB Output is correct
10 Correct 2 ms 1260 KB Output is correct
11 Correct 2 ms 1132 KB Output is correct
12 Correct 2 ms 1260 KB Output is correct
13 Correct 2 ms 1260 KB Output is correct
14 Correct 2 ms 1260 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1132 KB Output is correct
2 Correct 2 ms 1132 KB Output is correct
3 Correct 2 ms 1132 KB Output is correct
4 Correct 2 ms 1132 KB Output is correct
5 Correct 2 ms 1132 KB Output is correct
6 Correct 2 ms 1132 KB Output is correct
7 Correct 2 ms 1132 KB Output is correct
8 Correct 2 ms 1132 KB Output is correct
9 Correct 2 ms 1132 KB Output is correct
10 Correct 2 ms 1260 KB Output is correct
11 Correct 2 ms 1132 KB Output is correct
12 Correct 2 ms 1260 KB Output is correct
13 Correct 2 ms 1260 KB Output is correct
14 Correct 2 ms 1260 KB Output is correct
15 Correct 2 ms 1132 KB Output is correct
16 Correct 2 ms 1260 KB Output is correct
17 Correct 3 ms 1388 KB Output is correct
18 Correct 2 ms 1260 KB Output is correct
19 Correct 3 ms 1388 KB Output is correct
20 Correct 3 ms 1260 KB Output is correct
21 Correct 2 ms 1260 KB Output is correct
22 Correct 5 ms 1388 KB Output is correct
23 Correct 3 ms 1388 KB Output is correct
24 Correct 3 ms 1388 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1132 KB Output is correct
2 Correct 2 ms 1132 KB Output is correct
3 Correct 2 ms 1132 KB Output is correct
4 Correct 2 ms 1132 KB Output is correct
5 Correct 2 ms 1132 KB Output is correct
6 Correct 2 ms 1132 KB Output is correct
7 Correct 2 ms 1132 KB Output is correct
8 Correct 2 ms 1132 KB Output is correct
9 Correct 2 ms 1132 KB Output is correct
10 Correct 2 ms 1260 KB Output is correct
11 Correct 2 ms 1132 KB Output is correct
12 Correct 2 ms 1260 KB Output is correct
13 Correct 2 ms 1260 KB Output is correct
14 Correct 2 ms 1260 KB Output is correct
15 Correct 2 ms 1132 KB Output is correct
16 Correct 2 ms 1260 KB Output is correct
17 Correct 3 ms 1388 KB Output is correct
18 Correct 2 ms 1260 KB Output is correct
19 Correct 3 ms 1388 KB Output is correct
20 Correct 3 ms 1260 KB Output is correct
21 Correct 2 ms 1260 KB Output is correct
22 Correct 5 ms 1388 KB Output is correct
23 Correct 3 ms 1388 KB Output is correct
24 Correct 3 ms 1388 KB Output is correct
25 Correct 23 ms 3180 KB Output is correct
26 Correct 68 ms 6896 KB Output is correct
27 Correct 248 ms 14692 KB Output is correct
28 Correct 145 ms 9060 KB Output is correct
29 Correct 170 ms 12040 KB Output is correct
30 Correct 209 ms 10692 KB Output is correct
31 Correct 413 ms 22244 KB Output is correct
32 Correct 376 ms 19392 KB Output is correct
33 Correct 35 ms 6384 KB Output is correct
34 Correct 168 ms 14568 KB Output is correct
35 Correct 184 ms 27748 KB Output is correct
36 Correct 463 ms 27876 KB Output is correct
37 Correct 330 ms 27748 KB Output is correct
38 Correct 294 ms 27748 KB Output is correct