Submission #760177

# Submission time Handle Problem Language Result Execution time Memory
760177 2023-06-17T09:06:34 Z 8e7 Sequence (APIO23_sequence) C++17
41 / 100
2000 ms 43944 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;
vector<int> pos[maxn];
int sequence(int N, std::vector<int> A) {
	pref.type = 0;
	pref.N = N;
	pref.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;
	
	for (int i = 1;i <= N;i++) {
		int siz = pos[i].size();
		if (siz == 0) continue;
		for (int j = 0;j < siz;j++) {
			pref.modify(1, 0, N, pos[i][j], N, -1);
		}
		//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]
			pii pl = pref.query(1, 0, N, 0, l), pr = pref.query(1, 0, N, r, N);
			pl.ff = max(pl.ff, 0), pl.ss = min(pl.ss, 0);
			pii p = {-pl.ss + pr.ff,  pr.ss - pl.ff};
			//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;
			}
		};
		int prv = 1;
		for (int mid = 1;mid <= siz;mid++) {
			int poss = 0;
			for (int x = 0;x <= siz - mid;x++) {
				if (check(x, x+mid - 1)) {
					poss = 1;
					break;
				}
			}
			if (prv == 0 && poss == 1) {
				assert(0);
			}
		}
		/*
		int low = 1, up = siz+1;	
		while (low < up - 1) {
			int mid = (low + up) / 2;
			int 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);
		}

	}
 	return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 7 ms 11988 KB Output is correct
2 Correct 6 ms 11988 KB Output is correct
3 Correct 6 ms 12012 KB Output is correct
4 Correct 6 ms 11988 KB Output is correct
5 Correct 6 ms 12048 KB Output is correct
6 Correct 7 ms 11988 KB Output is correct
7 Correct 7 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 12036 KB Output is correct
12 Correct 7 ms 11988 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 11988 KB Output is correct
2 Correct 6 ms 11988 KB Output is correct
3 Correct 6 ms 12012 KB Output is correct
4 Correct 6 ms 11988 KB Output is correct
5 Correct 6 ms 12048 KB Output is correct
6 Correct 7 ms 11988 KB Output is correct
7 Correct 7 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 12036 KB Output is correct
12 Correct 7 ms 11988 KB Output is correct
13 Correct 7 ms 12116 KB Output is correct
14 Correct 9 ms 12056 KB Output is correct
15 Correct 13 ms 12144 KB Output is correct
16 Correct 13 ms 12148 KB Output is correct
17 Correct 61 ms 12116 KB Output is correct
18 Correct 7 ms 12116 KB Output is correct
19 Correct 8 ms 12116 KB Output is correct
20 Correct 9 ms 12164 KB Output is correct
21 Correct 15 ms 12116 KB Output is correct
22 Correct 13 ms 12164 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 11988 KB Output is correct
2 Correct 433 ms 38208 KB Output is correct
3 Correct 465 ms 38212 KB Output is correct
4 Execution timed out 2076 ms 30280 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Execution timed out 2069 ms 31340 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 595 ms 43944 KB Output is correct
2 Correct 637 ms 43932 KB Output is correct
3 Correct 639 ms 43368 KB Output is correct
4 Correct 656 ms 43368 KB Output is correct
5 Correct 514 ms 40032 KB Output is correct
6 Correct 559 ms 40024 KB Output is correct
7 Correct 466 ms 38828 KB Output is correct
8 Correct 447 ms 38508 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 11988 KB Output is correct
2 Correct 6 ms 11988 KB Output is correct
3 Correct 6 ms 12012 KB Output is correct
4 Correct 6 ms 11988 KB Output is correct
5 Correct 6 ms 12048 KB Output is correct
6 Correct 7 ms 11988 KB Output is correct
7 Correct 7 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 12036 KB Output is correct
12 Correct 7 ms 11988 KB Output is correct
13 Correct 7 ms 12116 KB Output is correct
14 Correct 9 ms 12056 KB Output is correct
15 Correct 13 ms 12144 KB Output is correct
16 Correct 13 ms 12148 KB Output is correct
17 Correct 61 ms 12116 KB Output is correct
18 Correct 7 ms 12116 KB Output is correct
19 Correct 8 ms 12116 KB Output is correct
20 Correct 9 ms 12164 KB Output is correct
21 Correct 15 ms 12116 KB Output is correct
22 Correct 13 ms 12164 KB Output is correct
23 Correct 93 ms 17348 KB Output is correct
24 Correct 101 ms 17260 KB Output is correct
25 Correct 105 ms 17368 KB Output is correct
26 Execution timed out 2058 ms 16448 KB Time limit exceeded
27 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 7 ms 11988 KB Output is correct
2 Correct 6 ms 11988 KB Output is correct
3 Correct 6 ms 12012 KB Output is correct
4 Correct 6 ms 11988 KB Output is correct
5 Correct 6 ms 12048 KB Output is correct
6 Correct 7 ms 11988 KB Output is correct
7 Correct 7 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 12036 KB Output is correct
12 Correct 7 ms 11988 KB Output is correct
13 Correct 7 ms 12116 KB Output is correct
14 Correct 9 ms 12056 KB Output is correct
15 Correct 13 ms 12144 KB Output is correct
16 Correct 13 ms 12148 KB Output is correct
17 Correct 61 ms 12116 KB Output is correct
18 Correct 7 ms 12116 KB Output is correct
19 Correct 8 ms 12116 KB Output is correct
20 Correct 9 ms 12164 KB Output is correct
21 Correct 15 ms 12116 KB Output is correct
22 Correct 13 ms 12164 KB Output is correct
23 Correct 433 ms 38208 KB Output is correct
24 Correct 465 ms 38212 KB Output is correct
25 Execution timed out 2076 ms 30280 KB Time limit exceeded
26 Halted 0 ms 0 KB -