Submission #760131

# Submission time Handle Problem Language Result Execution time Memory
760131 2023-06-17T08:19:40 Z 8e7 Sequence (APIO23_sequence) C++17
41 / 100
2000 ms 60208 KB
#include "sequence.h"
//Challenge: Accepted
#include <bits/stdc++.h>
using namespace std;
#ifdef zisk
void debug(){cout << endl;}
template<class T, class ... U> void debug(T a, U ...b){cout << a << " ", debug(b...);}
template<class T> void pary(T l, T r) {
	while (l != r) cout << *l << " ", l++;
	cout << endl;
}
#else
#define debug(...) 0
#define pary(...) 0
#endif
#define ll long long
#define maxn 500005
#define ff first
#define ss second
#define pii pair<int, int>
const int inf = 1<<30;
struct segtree{
	int ma[4*maxn], mi[4*maxn], tag[4*maxn];
	int type, N;
	void init(int cur, int l, int r) {
		if (r <= l) return;
		tag[cur] = 0;
		if (r - l == 1) {
			ma[cur] = mi[cur] = type ? N - l : l+1;
			return;
		}
		int m = (l + r) / 2;
		init(cur*2, l, m), init(cur*2+1, m, r);
		ma[cur] = max(ma[cur*2], ma[cur*2+1]);
		mi[cur] = min(mi[cur*2], mi[cur*2+1]);
	}
	void push(int cur, int l, int r) {
		if (!tag[cur]) return;
		ma[cur] += tag[cur];
		mi[cur] += tag[cur];
		if (r - l > 1) {
			tag[cur*2] += tag[cur];
			tag[cur*2+1] += tag[cur];
		}
		tag[cur] = 0;
	}
	void modify(int cur, int l, int r, int ql, int qr, int v) {
		if (r <= l || ql >= r || qr <= l) return;
		push(cur, l, r);
		if (ql <= l && qr >= r) {
			tag[cur] += v;
			return;
		}
		int m = (l + r) / 2;
		modify(cur*2, l, m, ql, qr, v);
		modify(cur*2+1, m, r, ql, qr, v);
		push(cur*2, l, m), push(cur*2+1, m, r);
		ma[cur] = max(ma[cur*2], ma[cur*2+1]);
		mi[cur] = min(mi[cur*2], mi[cur*2+1]);
	}
	pii query(int cur, int l, int r, int ql, int qr) { //(ma, mi)
		if (r <= l || ql >= r || qr <= l) return {-inf, inf};
		push(cur, l, r);
		if (ql <= l && qr >= r) return make_pair(ma[cur], mi[cur]);
		int m = (l + r) / 2;
		pii pl = query(cur*2, l, m, ql, qr), pr = query(cur*2+1, m, r, ql, qr);	
		pl.ff = max(pl.ff, pr.ff);
		pl.ss = min(pl.ss, pr.ss);
		return pl;
	}
	int get(int cur, int l, int r, int x) { 
		if (r <= l) return 0;
		push(cur, l, r);
		if (r - l == 1) return ma[cur];
		int m = (l + r) / 2;
		if (x < m) return get(cur*2, l, m, x);
		else return get(cur*2+1, m, r, x);
	}
} pref, suf;
vector<int> pos[maxn];
int sequence(int N, std::vector<int> A) {
	pref.type = 0, suf.type = 1;
	pref.N = suf.N = N;
	pref.init(1, 0, N), suf.init(1, 0, N);
	for (int i = 0;i < N;i++) {
		pos[A[i]].push_back(i);
	}

	//for (int j = 0;j < N;j++) cout << pref.get(1,0, N, j) << " ";
	//cout << endl;
	
	
	int ans = 1;
	vector<int> pv(N), sv(N);
	
	for (int i = 1;i <= N;i++) {
		int siz = pos[i].size();
		for (int j = 0;j < siz;j++) {
			pref.modify(1, 0, N, pos[i][j], N, -1);
			suf.modify(1, 0, N, 0, pos[i][j]+1, -1);
		}
		for (int j = 0;j < siz;j++) {
			pv[pos[i][j]] = pref.get(1, 0, N, pos[i][j]);
			sv[pos[i][j]] = suf.get(1, 0, N, pos[i][j]);
		}
		//for (int j = 0;j < N;j++) cout << pref.get(1,0, N, j) << " ";
		//cout << endl;
		auto check = [&] (int ind, int j) {
			int l = pos[i][ind], r = pos[i][j], cnt = j - ind + 1; //[l, r]
			int sum = pv[r] - pref.get(1, 0, N, l);
			pii pl = suf.query(1, 0, N, 0, l), pr = pref.query(1, 0, N, r+1, N);
			pii p = {sum + max(0, pl.ff-sv[l]) + max(0, pr.ff-pv[r]), sum + min(0, pl.ss-sv[l]) + min(0, pr.ss-pv[r])};
			//debug(ind, j, p.ss, p.ff);
			if (max(p.ss, -cnt) <= min(p.ff, cnt)) {
				ans = max(ans, j - ind + 1);
				return true;
			} else {
				return false;
			}
		};
		for (int x = 0;x < siz;x++) {
			for (int y = x+ans;y < siz;y++) check(x, y);
		}
		/*
		int low = ans, up = siz+1;
		while (low < up - 1) {
			int mid = (low + up) / 2;
			bool poss = 0;
			for (int x = 0;x <= siz - mid;x++) {
				if (check(x, x+mid-1)) {
					poss = 1;
					break;
				}
			}
			if (poss) low = mid;
			else up = mid;
		}
		*/
		
		for (int j = 0;j < siz;j++) {
			pref.modify(1, 0, N, pos[i][j], N, -1);
			suf.modify(1, 0, N, 0, pos[i][j]+1, -1);
		}

	}
 	return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Correct 6 ms 12076 KB Output is correct
3 Correct 5 ms 11988 KB Output is correct
4 Correct 6 ms 11988 KB Output is correct
5 Correct 6 ms 11988 KB Output is correct
6 Correct 6 ms 11988 KB Output is correct
7 Correct 6 ms 11988 KB Output is correct
8 Correct 6 ms 11988 KB Output is correct
9 Correct 6 ms 11988 KB Output is correct
10 Correct 6 ms 11988 KB Output is correct
11 Correct 6 ms 11988 KB Output is correct
12 Correct 6 ms 11988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Correct 6 ms 12076 KB Output is correct
3 Correct 5 ms 11988 KB Output is correct
4 Correct 6 ms 11988 KB Output is correct
5 Correct 6 ms 11988 KB Output is correct
6 Correct 6 ms 11988 KB Output is correct
7 Correct 6 ms 11988 KB Output is correct
8 Correct 6 ms 11988 KB Output is correct
9 Correct 6 ms 11988 KB Output is correct
10 Correct 6 ms 11988 KB Output is correct
11 Correct 6 ms 11988 KB Output is correct
12 Correct 6 ms 11988 KB Output is correct
13 Correct 8 ms 12264 KB Output is correct
14 Correct 7 ms 12252 KB Output is correct
15 Correct 11 ms 12236 KB Output is correct
16 Correct 12 ms 12116 KB Output is correct
17 Correct 34 ms 12116 KB Output is correct
18 Correct 7 ms 12208 KB Output is correct
19 Correct 8 ms 12244 KB Output is correct
20 Correct 10 ms 12216 KB Output is correct
21 Correct 15 ms 12256 KB Output is correct
22 Correct 13 ms 12256 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Correct 590 ms 54484 KB Output is correct
3 Correct 620 ms 54476 KB Output is correct
4 Execution timed out 2065 ms 46528 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 12076 KB Output is correct
2 Correct 655 ms 46840 KB Output is correct
3 Execution timed out 2078 ms 46636 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 859 ms 60208 KB Output is correct
2 Correct 862 ms 60188 KB Output is correct
3 Correct 941 ms 59620 KB Output is correct
4 Correct 874 ms 59624 KB Output is correct
5 Correct 786 ms 56396 KB Output is correct
6 Correct 776 ms 56288 KB Output is correct
7 Correct 684 ms 55092 KB Output is correct
8 Correct 661 ms 54772 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Correct 6 ms 12076 KB Output is correct
3 Correct 5 ms 11988 KB Output is correct
4 Correct 6 ms 11988 KB Output is correct
5 Correct 6 ms 11988 KB Output is correct
6 Correct 6 ms 11988 KB Output is correct
7 Correct 6 ms 11988 KB Output is correct
8 Correct 6 ms 11988 KB Output is correct
9 Correct 6 ms 11988 KB Output is correct
10 Correct 6 ms 11988 KB Output is correct
11 Correct 6 ms 11988 KB Output is correct
12 Correct 6 ms 11988 KB Output is correct
13 Correct 8 ms 12264 KB Output is correct
14 Correct 7 ms 12252 KB Output is correct
15 Correct 11 ms 12236 KB Output is correct
16 Correct 12 ms 12116 KB Output is correct
17 Correct 34 ms 12116 KB Output is correct
18 Correct 7 ms 12208 KB Output is correct
19 Correct 8 ms 12244 KB Output is correct
20 Correct 10 ms 12216 KB Output is correct
21 Correct 15 ms 12256 KB Output is correct
22 Correct 13 ms 12256 KB Output is correct
23 Correct 134 ms 21068 KB Output is correct
24 Correct 144 ms 21088 KB Output is correct
25 Correct 124 ms 21076 KB Output is correct
26 Correct 1525 ms 20180 KB Output is correct
27 Correct 1516 ms 20180 KB Output is correct
28 Correct 1558 ms 20164 KB Output is correct
29 Execution timed out 2085 ms 19796 KB Time limit exceeded
30 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Correct 6 ms 12076 KB Output is correct
3 Correct 5 ms 11988 KB Output is correct
4 Correct 6 ms 11988 KB Output is correct
5 Correct 6 ms 11988 KB Output is correct
6 Correct 6 ms 11988 KB Output is correct
7 Correct 6 ms 11988 KB Output is correct
8 Correct 6 ms 11988 KB Output is correct
9 Correct 6 ms 11988 KB Output is correct
10 Correct 6 ms 11988 KB Output is correct
11 Correct 6 ms 11988 KB Output is correct
12 Correct 6 ms 11988 KB Output is correct
13 Correct 8 ms 12264 KB Output is correct
14 Correct 7 ms 12252 KB Output is correct
15 Correct 11 ms 12236 KB Output is correct
16 Correct 12 ms 12116 KB Output is correct
17 Correct 34 ms 12116 KB Output is correct
18 Correct 7 ms 12208 KB Output is correct
19 Correct 8 ms 12244 KB Output is correct
20 Correct 10 ms 12216 KB Output is correct
21 Correct 15 ms 12256 KB Output is correct
22 Correct 13 ms 12256 KB Output is correct
23 Correct 590 ms 54484 KB Output is correct
24 Correct 620 ms 54476 KB Output is correct
25 Execution timed out 2065 ms 46528 KB Time limit exceeded
26 Halted 0 ms 0 KB -