Submission #128451

# Submission time Handle Problem Language Result Execution time Memory
128451 2019-07-10T23:48:40 Z qkxwsm New Home (APIO18_new_home) C++14
57 / 100
5000 ms 431636 KB
#include <bits/stdc++.h>

using namespace std;

template<class T, class U>
void ckmin(T &a, U b)
{
	if (a > b) a = b;
}
template<class T, class U>
void ckmax(T &a, U b)
{
	if (a < b) a = b;
}

#define MP make_pair
#define PB push_back
#define LB lower_bound
#define UB upper_bound
#define fi first
#define se second
#define FOR(i, a, b) for (auto i = (a); i < (b); i++)
#define FORD(i, a, b) for (auto i = (a) - 1; i >= (b); i--)
#define SZ(x) ((int) ((x).size()))
#define ALL(x) (x).begin(), (x).end()
#define LIM 100000007
#define INF 1000000007
#define LLINF 2696969696969696969ll
#define MAXN 300013

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vpi;
typedef vector<pll> vpl;
typedef pair<pii, pii> ppp;
typedef pair<pii, int> ppi;

int N, K, Q, S;
ppp arr[MAXN];
ppi quer[MAXN];
int ans[MAXN];
multiset<int> pts[MAXN];
vector<array<int, 4> > segments;
vector<array<int, 4> > events;
unordered_map<ll, vi> cancer;
vpi seg[MAXN << 2];
int iter[MAXN << 2];
vi compress;

void ins(int l, int r, int t)
{
	// cerr << "ins " << l << ' ' << r << " time " << t << endl;
	l = (l + r + 1) >> 1;
	cancer[1ll * INF * l + r].PB(SZ(segments));
	segments.PB({l, r, t, SZ(events) + 1});
}
void del(int l, int r, int t)
{
	// cerr << "del " << l << ' ' << r << " time " << t << endl;
	l = (l + r + 1) >> 1;
	// cerr << "rem " << (cancer[{l, r}]).size() << endl;
	segments[cancer[1ll * INF * l + r].back()][3] = t;
	cancer[1ll * INF * l + r].pop_back();
}

void inseg(int w, int L, int R, int a, int b, pii p)
{
	if (a <= L && R <= b)
	{
		seg[w].PB(p);
		return;
	}
	int mid = (L + R) >> 1;
	if (a <= mid) inseg(w << 1, L, mid, a, b, p);
	if (mid < b) inseg(w << 1 | 1, mid + 1, R, a, b, p);
	return;
}
void build(int w, int L, int R)
{
	if (L != R)
	{
		int mid = (L + R) >> 1;
		build(w << 1, L, mid);
		build(w << 1 | 1, mid + 1, R);
	}
	FOR(i, 1, SZ(seg[w]))
	{
		ckmax(seg[w][i].se, seg[w][i - 1].se);
	}
}
int query(int w, int L, int R, int a, int x)
{
	int res = -INF;
	while(iter[w] + 1 < SZ(seg[w]) && seg[w][iter[w] + 1].fi <= x)
	{
		iter[w]++;
	}
	if (iter[w] < SZ(seg[w]) && seg[w][iter[w]].fi <= x)
	{
		res = -x + seg[w][iter[w]].se;
	}
	if (L == R) return res;
	int mid = (L + R) >> 1;
	if (a <= mid) ckmax(res, query(w << 1, L, mid, a, x));
	else ckmax(res, query(w << 1 | 1, mid + 1, R, a, x));
	return res;
}

void solve()
{
	//consider distnace functions with negative slope ONLY.
	//arr: something of type t and position p in times (t1, t2)
	//quer: query of position p at time t, qid i
	FOR(i, 0, (1 << (33 - __builtin_clz(Q + 2))) + 1)
	{
		seg[i].clear();
		iter[i] = 0;
	}
	events.clear();
	cancer.clear();
	segments.clear();
	FOR(i, 0, K) pts[i].clear();
	FOR(i, 0, N)
	{
		int t1 = arr[i].se.fi, t2 = arr[i].se.se, ty = arr[i].fi.fi, x = arr[i].fi.se;
		if (t1 == t2) continue;
		events.PB({t1, -1, ty, x});
		events.PB({t2, -2, ty, x});
	}
	FOR(i, 0, Q)
	{
		int t = quer[i].fi.se, x = quer[i].fi.fi, qid = quer[i].se;
		events.PB({t, 0, qid, x});
	}
	sort(ALL(events));
	FOR(i, 0, K)
	{
		pts[i].insert(2 * LIM);
		pts[i].insert(-2 * LIM);
		ins(-2 * LIM, 2 * LIM, 0);
	}
	FOR(i, 0, SZ(events))
	{
		int t = events[i][0], typ = events[i][2], pos = events[i][3];
		if (events[i][1] == -1)
		{
			auto it = pts[typ].UB(pos);
			int rt = *it, lt = *prev(it);
			pts[typ].insert(pos);
			ins(lt, pos, t + 1);
			ins(pos, rt, t + 1);
			del(lt, rt, t);
		}
		if (events[i][1] == -2)
		{
			pts[typ].erase(pts[typ].find(pos));
			auto it = pts[typ].UB(pos);
			int rt = *it, lt = *prev(it);
			del(lt, pos, t);
			del(pos, rt, t);
			ins(lt, rt, t + 1);
		}
	}
	sort(ALL(segments));
	FOR(i, 0, SZ(segments))
	{
		int l = segments[i][2], r = segments[i][3]; if (l > r) continue;
		inseg(1, 0, Q + 2, l, r, {segments[i][0], segments[i][1]});
	}
	//ok cool we have the segments
	build(1, 0, Q + 2);
	vector<array<int, 3> > queries;
	FOR(i, 0, SZ(events))
	{
		if (events[i][1] == 0)
		{
			int t = events[i][0], qid = events[i][2], pos = events[i][3];
			queries.PB({pos, t + 1, qid});
		}
	}
	sort(ALL(queries));
	for (auto p : queries)
	{
		// cerr << "ask at " << p[1] << endl;
		ckmax(ans[p[2]], query(1, 0, Q + 2, p[1], p[0]));
	}
}
bool cmp(ppi a, ppi b)
{
	return a.fi.se < b.fi.se;
}

int32_t main()
{
	if (fopen("file.in", "r"))
	{
		freopen("file.in", "r", stdin);
		freopen("file.out", "w", stdout);
	}
	ios_base::sync_with_stdio(0); cin.tie(0);
	cin >> N >> K >> Q;
	FOR(i, 0, N)
	{
		cin >> arr[i].fi.se >> arr[i].fi.fi >> arr[i].se.fi >> arr[i].se.se;
		arr[i].fi.fi--; arr[i].se.se++;
	}
	FOR(i, 0, Q)
	{
		cin >> quer[i].fi.fi >> quer[i].fi.se; quer[i].se = i;
		compress.PB(quer[i].fi.se);
	}
	compress.PB(INF);
	compress.PB(0);
	sort(ALL(compress)); compress.erase(unique(ALL(compress)), compress.end());
	FOR(i, 0, Q)
	{
		quer[i].fi.se = LB(ALL(compress), quer[i].fi.se) - compress.begin();
	}
	FOR(i, 0, N)
	{
		arr[i].se.fi = LB(ALL(compress), arr[i].se.fi) - compress.begin();
		arr[i].se.se = LB(ALL(compress), arr[i].se.se) - compress.begin();
	}
	sort(arr, arr + N);
	sort(quer, quer + Q, cmp);
	solve();
	FOR(i, 0, N)
	{
		arr[i].fi.se = 100000001 - arr[i].fi.se;
	}
	FOR(i, 0, Q)
	{
		quer[i].fi.fi = 100000001 - quer[i].fi.fi;
	}
	solve();
	//events: OPEN/CLOSE a store at time t, position p, type x, ASK at time t, position p
	FOR(i, 0, Q)
	{
		if (ans[i] >= LIM)
		{
			cout << "-1\n";
			continue;
		}
		// cerr << "ans " << ans[i] << endl;
		cout << ans[i] << '\n';
	}
	// cerr << "time elapsed = " << clock() / ((CLOCKS_PER_SEC) / 1000) << " ms" << endl;
	return 0;
}

Compilation message

new_home.cpp: In function 'int32_t main()':
new_home.cpp:201:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   freopen("file.in", "r", stdin);
   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
new_home.cpp:202:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   freopen("file.out", "w", stdout);
   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 39 ms 42616 KB Output is correct
2 Correct 39 ms 42616 KB Output is correct
3 Correct 39 ms 42616 KB Output is correct
4 Correct 39 ms 42620 KB Output is correct
5 Correct 42 ms 42872 KB Output is correct
6 Correct 42 ms 42872 KB Output is correct
7 Correct 42 ms 42872 KB Output is correct
8 Correct 42 ms 42872 KB Output is correct
9 Correct 43 ms 43000 KB Output is correct
10 Correct 42 ms 42872 KB Output is correct
11 Correct 42 ms 42872 KB Output is correct
12 Correct 42 ms 42872 KB Output is correct
13 Correct 42 ms 42716 KB Output is correct
14 Correct 41 ms 42872 KB Output is correct
15 Correct 42 ms 43000 KB Output is correct
16 Correct 42 ms 42988 KB Output is correct
17 Correct 42 ms 43092 KB Output is correct
18 Correct 42 ms 43000 KB Output is correct
19 Correct 43 ms 42912 KB Output is correct
20 Correct 42 ms 42888 KB Output is correct
21 Correct 41 ms 42872 KB Output is correct
22 Correct 42 ms 43000 KB Output is correct
23 Correct 42 ms 42872 KB Output is correct
24 Correct 42 ms 42868 KB Output is correct
25 Correct 42 ms 43000 KB Output is correct
26 Correct 41 ms 42872 KB Output is correct
27 Correct 41 ms 42744 KB Output is correct
28 Correct 41 ms 42872 KB Output is correct
29 Correct 41 ms 42872 KB Output is correct
30 Correct 40 ms 42744 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 39 ms 42616 KB Output is correct
2 Correct 39 ms 42616 KB Output is correct
3 Correct 39 ms 42616 KB Output is correct
4 Correct 39 ms 42620 KB Output is correct
5 Correct 42 ms 42872 KB Output is correct
6 Correct 42 ms 42872 KB Output is correct
7 Correct 42 ms 42872 KB Output is correct
8 Correct 42 ms 42872 KB Output is correct
9 Correct 43 ms 43000 KB Output is correct
10 Correct 42 ms 42872 KB Output is correct
11 Correct 42 ms 42872 KB Output is correct
12 Correct 42 ms 42872 KB Output is correct
13 Correct 42 ms 42716 KB Output is correct
14 Correct 41 ms 42872 KB Output is correct
15 Correct 42 ms 43000 KB Output is correct
16 Correct 42 ms 42988 KB Output is correct
17 Correct 42 ms 43092 KB Output is correct
18 Correct 42 ms 43000 KB Output is correct
19 Correct 43 ms 42912 KB Output is correct
20 Correct 42 ms 42888 KB Output is correct
21 Correct 41 ms 42872 KB Output is correct
22 Correct 42 ms 43000 KB Output is correct
23 Correct 42 ms 42872 KB Output is correct
24 Correct 42 ms 42868 KB Output is correct
25 Correct 42 ms 43000 KB Output is correct
26 Correct 41 ms 42872 KB Output is correct
27 Correct 41 ms 42744 KB Output is correct
28 Correct 41 ms 42872 KB Output is correct
29 Correct 41 ms 42872 KB Output is correct
30 Correct 40 ms 42744 KB Output is correct
31 Correct 1182 ms 92244 KB Output is correct
32 Correct 315 ms 55092 KB Output is correct
33 Correct 1180 ms 90572 KB Output is correct
34 Correct 1129 ms 90976 KB Output is correct
35 Correct 1262 ms 92128 KB Output is correct
36 Correct 1246 ms 92044 KB Output is correct
37 Correct 951 ms 86496 KB Output is correct
38 Correct 1018 ms 86368 KB Output is correct
39 Correct 730 ms 79740 KB Output is correct
40 Correct 774 ms 81240 KB Output is correct
41 Correct 996 ms 85596 KB Output is correct
42 Correct 940 ms 85856 KB Output is correct
43 Correct 279 ms 56672 KB Output is correct
44 Correct 976 ms 85132 KB Output is correct
45 Correct 821 ms 81508 KB Output is correct
46 Correct 682 ms 75472 KB Output is correct
47 Correct 569 ms 73696 KB Output is correct
48 Correct 542 ms 72160 KB Output is correct
49 Correct 622 ms 76896 KB Output is correct
50 Correct 759 ms 83640 KB Output is correct
51 Correct 670 ms 75232 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4021 ms 292188 KB Output is correct
2 Correct 4107 ms 273536 KB Output is correct
3 Correct 4032 ms 425796 KB Output is correct
4 Correct 3970 ms 287912 KB Output is correct
5 Correct 4189 ms 269372 KB Output is correct
6 Correct 4279 ms 274392 KB Output is correct
7 Correct 4323 ms 431636 KB Output is correct
8 Correct 4141 ms 302148 KB Output is correct
9 Correct 3811 ms 283192 KB Output is correct
10 Correct 3856 ms 275664 KB Output is correct
11 Correct 3870 ms 270244 KB Output is correct
12 Correct 3785 ms 275676 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 5027 ms 298972 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 39 ms 42616 KB Output is correct
2 Correct 39 ms 42616 KB Output is correct
3 Correct 39 ms 42616 KB Output is correct
4 Correct 39 ms 42620 KB Output is correct
5 Correct 42 ms 42872 KB Output is correct
6 Correct 42 ms 42872 KB Output is correct
7 Correct 42 ms 42872 KB Output is correct
8 Correct 42 ms 42872 KB Output is correct
9 Correct 43 ms 43000 KB Output is correct
10 Correct 42 ms 42872 KB Output is correct
11 Correct 42 ms 42872 KB Output is correct
12 Correct 42 ms 42872 KB Output is correct
13 Correct 42 ms 42716 KB Output is correct
14 Correct 41 ms 42872 KB Output is correct
15 Correct 42 ms 43000 KB Output is correct
16 Correct 42 ms 42988 KB Output is correct
17 Correct 42 ms 43092 KB Output is correct
18 Correct 42 ms 43000 KB Output is correct
19 Correct 43 ms 42912 KB Output is correct
20 Correct 42 ms 42888 KB Output is correct
21 Correct 41 ms 42872 KB Output is correct
22 Correct 42 ms 43000 KB Output is correct
23 Correct 42 ms 42872 KB Output is correct
24 Correct 42 ms 42868 KB Output is correct
25 Correct 42 ms 43000 KB Output is correct
26 Correct 41 ms 42872 KB Output is correct
27 Correct 41 ms 42744 KB Output is correct
28 Correct 41 ms 42872 KB Output is correct
29 Correct 41 ms 42872 KB Output is correct
30 Correct 40 ms 42744 KB Output is correct
31 Correct 1182 ms 92244 KB Output is correct
32 Correct 315 ms 55092 KB Output is correct
33 Correct 1180 ms 90572 KB Output is correct
34 Correct 1129 ms 90976 KB Output is correct
35 Correct 1262 ms 92128 KB Output is correct
36 Correct 1246 ms 92044 KB Output is correct
37 Correct 951 ms 86496 KB Output is correct
38 Correct 1018 ms 86368 KB Output is correct
39 Correct 730 ms 79740 KB Output is correct
40 Correct 774 ms 81240 KB Output is correct
41 Correct 996 ms 85596 KB Output is correct
42 Correct 940 ms 85856 KB Output is correct
43 Correct 279 ms 56672 KB Output is correct
44 Correct 976 ms 85132 KB Output is correct
45 Correct 821 ms 81508 KB Output is correct
46 Correct 682 ms 75472 KB Output is correct
47 Correct 569 ms 73696 KB Output is correct
48 Correct 542 ms 72160 KB Output is correct
49 Correct 622 ms 76896 KB Output is correct
50 Correct 759 ms 83640 KB Output is correct
51 Correct 670 ms 75232 KB Output is correct
52 Correct 1171 ms 102216 KB Output is correct
53 Correct 981 ms 93536 KB Output is correct
54 Correct 1219 ms 96212 KB Output is correct
55 Correct 950 ms 93664 KB Output is correct
56 Correct 930 ms 95824 KB Output is correct
57 Correct 1151 ms 88548 KB Output is correct
58 Correct 982 ms 92384 KB Output is correct
59 Correct 1016 ms 95304 KB Output is correct
60 Correct 974 ms 88648 KB Output is correct
61 Correct 371 ms 71520 KB Output is correct
62 Correct 1016 ms 103904 KB Output is correct
63 Correct 1172 ms 98792 KB Output is correct
64 Correct 1170 ms 97504 KB Output is correct
65 Correct 1090 ms 94816 KB Output is correct
66 Correct 1087 ms 89184 KB Output is correct
67 Correct 389 ms 58776 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 39 ms 42616 KB Output is correct
2 Correct 39 ms 42616 KB Output is correct
3 Correct 39 ms 42616 KB Output is correct
4 Correct 39 ms 42620 KB Output is correct
5 Correct 42 ms 42872 KB Output is correct
6 Correct 42 ms 42872 KB Output is correct
7 Correct 42 ms 42872 KB Output is correct
8 Correct 42 ms 42872 KB Output is correct
9 Correct 43 ms 43000 KB Output is correct
10 Correct 42 ms 42872 KB Output is correct
11 Correct 42 ms 42872 KB Output is correct
12 Correct 42 ms 42872 KB Output is correct
13 Correct 42 ms 42716 KB Output is correct
14 Correct 41 ms 42872 KB Output is correct
15 Correct 42 ms 43000 KB Output is correct
16 Correct 42 ms 42988 KB Output is correct
17 Correct 42 ms 43092 KB Output is correct
18 Correct 42 ms 43000 KB Output is correct
19 Correct 43 ms 42912 KB Output is correct
20 Correct 42 ms 42888 KB Output is correct
21 Correct 41 ms 42872 KB Output is correct
22 Correct 42 ms 43000 KB Output is correct
23 Correct 42 ms 42872 KB Output is correct
24 Correct 42 ms 42868 KB Output is correct
25 Correct 42 ms 43000 KB Output is correct
26 Correct 41 ms 42872 KB Output is correct
27 Correct 41 ms 42744 KB Output is correct
28 Correct 41 ms 42872 KB Output is correct
29 Correct 41 ms 42872 KB Output is correct
30 Correct 40 ms 42744 KB Output is correct
31 Correct 1182 ms 92244 KB Output is correct
32 Correct 315 ms 55092 KB Output is correct
33 Correct 1180 ms 90572 KB Output is correct
34 Correct 1129 ms 90976 KB Output is correct
35 Correct 1262 ms 92128 KB Output is correct
36 Correct 1246 ms 92044 KB Output is correct
37 Correct 951 ms 86496 KB Output is correct
38 Correct 1018 ms 86368 KB Output is correct
39 Correct 730 ms 79740 KB Output is correct
40 Correct 774 ms 81240 KB Output is correct
41 Correct 996 ms 85596 KB Output is correct
42 Correct 940 ms 85856 KB Output is correct
43 Correct 279 ms 56672 KB Output is correct
44 Correct 976 ms 85132 KB Output is correct
45 Correct 821 ms 81508 KB Output is correct
46 Correct 682 ms 75472 KB Output is correct
47 Correct 569 ms 73696 KB Output is correct
48 Correct 542 ms 72160 KB Output is correct
49 Correct 622 ms 76896 KB Output is correct
50 Correct 759 ms 83640 KB Output is correct
51 Correct 670 ms 75232 KB Output is correct
52 Correct 4021 ms 292188 KB Output is correct
53 Correct 4107 ms 273536 KB Output is correct
54 Correct 4032 ms 425796 KB Output is correct
55 Correct 3970 ms 287912 KB Output is correct
56 Correct 4189 ms 269372 KB Output is correct
57 Correct 4279 ms 274392 KB Output is correct
58 Correct 4323 ms 431636 KB Output is correct
59 Correct 4141 ms 302148 KB Output is correct
60 Correct 3811 ms 283192 KB Output is correct
61 Correct 3856 ms 275664 KB Output is correct
62 Correct 3870 ms 270244 KB Output is correct
63 Correct 3785 ms 275676 KB Output is correct
64 Execution timed out 5027 ms 298972 KB Time limit exceeded
65 Halted 0 ms 0 KB -