Submission #616002

# Submission time Handle Problem Language Result Execution time Memory
616002 2022-07-31T17:51:08 Z cheissmart Fish 2 (JOI22_fish2) C++14
60 / 100
4000 ms 56880 KB
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#define IO_OP std::ios::sync_with_stdio(0); std::cin.tie(0);
#define F first
#define S second
#define V vector
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define SZ(v) int((v).size())
#define ALL(v) (v).begin(), (v).end()

using namespace std;

typedef long long ll;
typedef pair<int, int> pi;
typedef V<int> vi;

const int INF = 1e9 + 7, N = 1e5 + 7;
const ll oo = 1e18;

ll a[N];
int n;

namespace cover {
	pi t[N * 4];
	int lz[N * 4];

	pi add(pi a, pi b) {
		if(a.F != b.F) return min(a, b);
		a.S += b.S;
		return a;
	}
	void apply(int v, int x) {
		t[v].F += x;
		lz[v] += x;
	}
	void push(int v) {
		apply(v * 2, lz[v]);
		apply(v * 2 + 1, lz[v]);
		lz[v] = 0;
	}
	void build(int v = 1, int tl = 1, int tr = n + 1) {
		if(tr - tl == 1) {
			t[v] = {0, 1};
			return;
		}
		int tm = (tl + tr) / 2;
		build(v * 2, tl, tm);
		build(v * 2 + 1, tm, tr);
		t[v] = add(t[v * 2], t[v * 2 + 1]);
	}
	void add(int l, int r, int x, int v = 1, int tl = 1, int tr = n + 1) {
		if(l <= tl && tr <= r) {
			apply(v, x);
			return;
		}
		push(v);
		int tm = (tl + tr) / 2;
		if(l < tm) add(l, r, x, v * 2, tl, tm);
		if(r > tm) add(l, r, x, v * 2 + 1, tm, tr);
		t[v] = add(t[v * 2], t[v * 2 + 1]);
	}
	pi qry(int l, int r, int v = 1, int tl = 1, int tr = n + 1) {
		if(l <= tl && tr <= r)
			return t[v];
		push(v);
		int tm = (tl + tr) / 2;
		pi res = {100, 100};
		if(l < tm) res = add(res, qry(l, r, v * 2, tl, tm));
		if(r > tm) res = add(res, qry(l, r, v * 2 + 1, tm, tr));
		return res;
	}
}

namespace seg {
	struct node {
		V<pair<int, ll>> bad_pref, bad_suff;
		V<pi> bad_seg;
		ll sum;
	} t[N * 4];
	V<pi> pull(int v, int posl = INF, int posr = 0) {
		t[v].bad_pref = t[v * 2].bad_pref;
		t[v].bad_suff = t[v * 2 + 1].bad_suff;

		for(auto[pos, sum]:t[v * 2 + 1].bad_pref) if(sum + t[v * 2].sum < a[pos + 1])
			t[v].bad_pref.EB(pos, sum + t[v * 2].sum);
		for(auto[pos, sum]:t[v * 2].bad_suff) if(sum + t[v * 2 + 1].sum < a[pos - 1])
			t[v].bad_suff.EB(pos, sum + t[v * 2 + 1].sum);

		V<pi> bad_seg;
		for(int i = 0, j = 0; i < SZ(t[v * 2].bad_suff) && j < SZ(t[v * 2 + 1].bad_pref); ) {
			auto he = t[v * 2].bad_suff[i], be = t[v * 2 + 1].bad_pref[j];
			if(he.S + be.S < min(a[he.F - 1], a[be.F + 1])) {
				if(he.F <= posl && be.F >= posr)
					bad_seg.EB(he.F, be.F);
			}
			if(a[he.F - 1] < a[be.F + 1])
				i++;
			else
				j++;
		}
		t[v].sum = t[v * 2].sum + t[v * 2 + 1].sum;
		return bad_seg;
	}
	void build(int v = 1, int tl = 1, int tr = n + 1) {
		if(tr - tl == 1) {
			t[v].sum = a[tl];
			if(a[tl] < a[tl + 1])
				t[v].bad_pref.EB(tl, a[tl]);
			if(a[tl] < a[tl - 1])
				t[v].bad_suff.EB(tl, a[tl]);
			if(a[tl] < a[tl + 1] && a[tl] < a[tl - 1])
				t[v].bad_seg.EB(tl, tl);
		} else {
			int tm = (tl + tr) / 2;
			build(v * 2, tl, tm);
			build(v * 2 + 1, tm, tr);
			t[v].bad_seg = pull(v);
		}
		for(auto[l, r]:t[v].bad_seg)
			cover::add(l, r + 1, 1);
	}
	void upd(int pos, int v = 1, int tl = 1, int tr = n + 1) {
		V<pi> tt;
		for(auto[l, r]:t[v].bad_seg) {
			if(r < pos - 1 || l > pos + 1) {
				tt.EB(l, r);
				continue;
			}
			cover::add(l, r + 1, -1);
		}
		t[v].bad_seg = tt, t[v].bad_pref.clear(), t[v].bad_suff.clear();

		if(tr - tl == 1) {
			t[v].sum = a[tl];
			if(a[tl] < a[tl + 1])
				t[v].bad_pref.EB(tl, a[tl]);
			if(a[tl] < a[tl - 1])
				t[v].bad_suff.EB(tl, a[tl]);
			if(a[tl] < a[tl + 1] && a[tl] < a[tl - 1]) {
				t[v].bad_seg.EB(tl, tl);
				cover::add(tl, tl + 1, 1);
			}
		} else {
			int tm = (tl + tr) / 2;
			if(pos - 1 < tm)
				upd(pos, v * 2, tl, tm);
			if(pos + 1 >= tm)
				upd(pos, v * 2 + 1, tm, tr);
			tt = pull(v, pos + 1, pos - 1);
			for(auto[l, r]:tt) {
				t[v].bad_seg.EB(l, r);
				cover::add(l, r + 1, 1);
			}
		}
	}
}

void upd(int pos, ll val) {
	a[pos] = val;
	seg::upd(pos);
}

signed main()
{
	IO_OP;

	cin >> n;
	a[0] = a[n + 1] = oo;
	for(int i = 1; i <= n; i++)
		cin >> a[i];

	cover::build();
	seg::build();

	int q;
	cin >> q;
	while(q--) {
		int op;
		cin >> op;
		if(op == 1) {
			int x, y;
			cin >> x >> y;
			upd(x, y);
		} else {
			int l, r;
			cin >> l >> r;
			ll tl = a[l - 1], tr = a[r + 1];
			if(l - 1 >= 1) upd(l - 1, 1e15);
			if(r + 1 <= n) upd(r + 1, 1e15);

			auto p = cover::qry(l, r + 1);
			cout << p.S << '\n';

			if(l - 1 >= 1) upd(l - 1, tl);
			if(r + 1 <= n) upd(r + 1, tr);
		}
	}

}

Compilation message

fish2.cpp: In function 'std::vector<std::pair<int, int> > seg::pull(int, int, int)':
fish2.cpp:86:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   86 |   for(auto[pos, sum]:t[v * 2 + 1].bad_pref) if(sum + t[v * 2].sum < a[pos + 1])
      |           ^
fish2.cpp:88:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   88 |   for(auto[pos, sum]:t[v * 2].bad_suff) if(sum + t[v * 2 + 1].sum < a[pos - 1])
      |           ^
fish2.cpp: In function 'void seg::build(int, int, int)':
fish2.cpp:121:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  121 |   for(auto[l, r]:t[v].bad_seg)
      |           ^
fish2.cpp: In function 'void seg::upd(int, int, int, int)':
fish2.cpp:126:11: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  126 |   for(auto[l, r]:t[v].bad_seg) {
      |           ^
fish2.cpp:152:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  152 |    for(auto[l, r]:tt) {
      |            ^
# Verdict Execution time Memory Grader output
1 Correct 16 ms 31572 KB Output is correct
2 Correct 19 ms 31608 KB Output is correct
3 Correct 16 ms 31648 KB Output is correct
4 Correct 16 ms 31544 KB Output is correct
5 Correct 22 ms 31700 KB Output is correct
6 Correct 25 ms 31700 KB Output is correct
7 Correct 26 ms 31752 KB Output is correct
8 Correct 28 ms 31724 KB Output is correct
9 Correct 25 ms 31700 KB Output is correct
10 Correct 17 ms 31668 KB Output is correct
11 Correct 20 ms 31760 KB Output is correct
12 Correct 23 ms 31740 KB Output is correct
13 Correct 31 ms 31700 KB Output is correct
14 Correct 23 ms 31700 KB Output is correct
15 Correct 22 ms 31788 KB Output is correct
16 Correct 24 ms 31684 KB Output is correct
17 Correct 21 ms 31636 KB Output is correct
18 Correct 23 ms 31672 KB Output is correct
19 Correct 19 ms 31744 KB Output is correct
20 Correct 20 ms 31652 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 31576 KB Output is correct
2 Correct 97 ms 49884 KB Output is correct
3 Correct 96 ms 48556 KB Output is correct
4 Correct 87 ms 49792 KB Output is correct
5 Correct 95 ms 48684 KB Output is correct
6 Correct 80 ms 43968 KB Output is correct
7 Correct 51 ms 42704 KB Output is correct
8 Correct 66 ms 44016 KB Output is correct
9 Correct 57 ms 42792 KB Output is correct
10 Correct 86 ms 49480 KB Output is correct
11 Correct 90 ms 45824 KB Output is correct
12 Correct 69 ms 43356 KB Output is correct
13 Correct 60 ms 43340 KB Output is correct
14 Correct 79 ms 46184 KB Output is correct
15 Correct 76 ms 45996 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 31572 KB Output is correct
2 Correct 19 ms 31608 KB Output is correct
3 Correct 16 ms 31648 KB Output is correct
4 Correct 16 ms 31544 KB Output is correct
5 Correct 22 ms 31700 KB Output is correct
6 Correct 25 ms 31700 KB Output is correct
7 Correct 26 ms 31752 KB Output is correct
8 Correct 28 ms 31724 KB Output is correct
9 Correct 25 ms 31700 KB Output is correct
10 Correct 17 ms 31668 KB Output is correct
11 Correct 20 ms 31760 KB Output is correct
12 Correct 23 ms 31740 KB Output is correct
13 Correct 31 ms 31700 KB Output is correct
14 Correct 23 ms 31700 KB Output is correct
15 Correct 22 ms 31788 KB Output is correct
16 Correct 24 ms 31684 KB Output is correct
17 Correct 21 ms 31636 KB Output is correct
18 Correct 23 ms 31672 KB Output is correct
19 Correct 19 ms 31744 KB Output is correct
20 Correct 20 ms 31652 KB Output is correct
21 Correct 19 ms 31576 KB Output is correct
22 Correct 97 ms 49884 KB Output is correct
23 Correct 96 ms 48556 KB Output is correct
24 Correct 87 ms 49792 KB Output is correct
25 Correct 95 ms 48684 KB Output is correct
26 Correct 80 ms 43968 KB Output is correct
27 Correct 51 ms 42704 KB Output is correct
28 Correct 66 ms 44016 KB Output is correct
29 Correct 57 ms 42792 KB Output is correct
30 Correct 86 ms 49480 KB Output is correct
31 Correct 90 ms 45824 KB Output is correct
32 Correct 69 ms 43356 KB Output is correct
33 Correct 60 ms 43340 KB Output is correct
34 Correct 79 ms 46184 KB Output is correct
35 Correct 76 ms 45996 KB Output is correct
36 Correct 151 ms 50656 KB Output is correct
37 Correct 162 ms 49136 KB Output is correct
38 Correct 150 ms 48880 KB Output is correct
39 Correct 129 ms 50616 KB Output is correct
40 Correct 164 ms 48776 KB Output is correct
41 Correct 89 ms 44400 KB Output is correct
42 Correct 92 ms 44556 KB Output is correct
43 Correct 93 ms 43288 KB Output is correct
44 Correct 96 ms 43260 KB Output is correct
45 Correct 138 ms 49952 KB Output is correct
46 Correct 112 ms 50220 KB Output is correct
47 Correct 122 ms 44772 KB Output is correct
48 Correct 73 ms 43616 KB Output is correct
49 Correct 88 ms 43728 KB Output is correct
50 Correct 87 ms 46376 KB Output is correct
51 Correct 91 ms 46316 KB Output is correct
52 Correct 91 ms 46476 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 31576 KB Output is correct
2 Correct 97 ms 49884 KB Output is correct
3 Correct 96 ms 48556 KB Output is correct
4 Correct 87 ms 49792 KB Output is correct
5 Correct 95 ms 48684 KB Output is correct
6 Correct 80 ms 43968 KB Output is correct
7 Correct 51 ms 42704 KB Output is correct
8 Correct 66 ms 44016 KB Output is correct
9 Correct 57 ms 42792 KB Output is correct
10 Correct 86 ms 49480 KB Output is correct
11 Correct 90 ms 45824 KB Output is correct
12 Correct 69 ms 43356 KB Output is correct
13 Correct 60 ms 43340 KB Output is correct
14 Correct 79 ms 46184 KB Output is correct
15 Correct 76 ms 45996 KB Output is correct
16 Correct 17 ms 31572 KB Output is correct
17 Execution timed out 4062 ms 53824 KB Time limit exceeded
18 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 19 ms 31576 KB Output is correct
2 Correct 97 ms 49884 KB Output is correct
3 Correct 96 ms 48556 KB Output is correct
4 Correct 87 ms 49792 KB Output is correct
5 Correct 95 ms 48684 KB Output is correct
6 Correct 80 ms 43968 KB Output is correct
7 Correct 51 ms 42704 KB Output is correct
8 Correct 66 ms 44016 KB Output is correct
9 Correct 57 ms 42792 KB Output is correct
10 Correct 86 ms 49480 KB Output is correct
11 Correct 90 ms 45824 KB Output is correct
12 Correct 69 ms 43356 KB Output is correct
13 Correct 60 ms 43340 KB Output is correct
14 Correct 79 ms 46184 KB Output is correct
15 Correct 76 ms 45996 KB Output is correct
16 Correct 17 ms 31584 KB Output is correct
17 Correct 1050 ms 51168 KB Output is correct
18 Correct 842 ms 56788 KB Output is correct
19 Correct 787 ms 49056 KB Output is correct
20 Correct 677 ms 55708 KB Output is correct
21 Correct 1052 ms 51356 KB Output is correct
22 Correct 904 ms 56480 KB Output is correct
23 Correct 982 ms 49032 KB Output is correct
24 Correct 803 ms 56140 KB Output is correct
25 Correct 919 ms 48972 KB Output is correct
26 Correct 337 ms 47436 KB Output is correct
27 Correct 441 ms 48448 KB Output is correct
28 Correct 543 ms 50292 KB Output is correct
29 Correct 374 ms 47768 KB Output is correct
30 Correct 465 ms 48360 KB Output is correct
31 Correct 651 ms 51276 KB Output is correct
32 Correct 800 ms 54952 KB Output is correct
33 Correct 557 ms 46064 KB Output is correct
34 Correct 750 ms 56880 KB Output is correct
35 Correct 449 ms 49680 KB Output is correct
36 Correct 707 ms 53532 KB Output is correct
37 Correct 597 ms 49264 KB Output is correct
38 Correct 382 ms 47924 KB Output is correct
39 Correct 443 ms 49916 KB Output is correct
40 Correct 217 ms 48232 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 16 ms 31572 KB Output is correct
2 Correct 19 ms 31608 KB Output is correct
3 Correct 16 ms 31648 KB Output is correct
4 Correct 16 ms 31544 KB Output is correct
5 Correct 22 ms 31700 KB Output is correct
6 Correct 25 ms 31700 KB Output is correct
7 Correct 26 ms 31752 KB Output is correct
8 Correct 28 ms 31724 KB Output is correct
9 Correct 25 ms 31700 KB Output is correct
10 Correct 17 ms 31668 KB Output is correct
11 Correct 20 ms 31760 KB Output is correct
12 Correct 23 ms 31740 KB Output is correct
13 Correct 31 ms 31700 KB Output is correct
14 Correct 23 ms 31700 KB Output is correct
15 Correct 22 ms 31788 KB Output is correct
16 Correct 24 ms 31684 KB Output is correct
17 Correct 21 ms 31636 KB Output is correct
18 Correct 23 ms 31672 KB Output is correct
19 Correct 19 ms 31744 KB Output is correct
20 Correct 20 ms 31652 KB Output is correct
21 Correct 19 ms 31576 KB Output is correct
22 Correct 97 ms 49884 KB Output is correct
23 Correct 96 ms 48556 KB Output is correct
24 Correct 87 ms 49792 KB Output is correct
25 Correct 95 ms 48684 KB Output is correct
26 Correct 80 ms 43968 KB Output is correct
27 Correct 51 ms 42704 KB Output is correct
28 Correct 66 ms 44016 KB Output is correct
29 Correct 57 ms 42792 KB Output is correct
30 Correct 86 ms 49480 KB Output is correct
31 Correct 90 ms 45824 KB Output is correct
32 Correct 69 ms 43356 KB Output is correct
33 Correct 60 ms 43340 KB Output is correct
34 Correct 79 ms 46184 KB Output is correct
35 Correct 76 ms 45996 KB Output is correct
36 Correct 151 ms 50656 KB Output is correct
37 Correct 162 ms 49136 KB Output is correct
38 Correct 150 ms 48880 KB Output is correct
39 Correct 129 ms 50616 KB Output is correct
40 Correct 164 ms 48776 KB Output is correct
41 Correct 89 ms 44400 KB Output is correct
42 Correct 92 ms 44556 KB Output is correct
43 Correct 93 ms 43288 KB Output is correct
44 Correct 96 ms 43260 KB Output is correct
45 Correct 138 ms 49952 KB Output is correct
46 Correct 112 ms 50220 KB Output is correct
47 Correct 122 ms 44772 KB Output is correct
48 Correct 73 ms 43616 KB Output is correct
49 Correct 88 ms 43728 KB Output is correct
50 Correct 87 ms 46376 KB Output is correct
51 Correct 91 ms 46316 KB Output is correct
52 Correct 91 ms 46476 KB Output is correct
53 Correct 17 ms 31572 KB Output is correct
54 Execution timed out 4062 ms 53824 KB Time limit exceeded
55 Halted 0 ms 0 KB -