Submission #749294

# Submission time Handle Problem Language Result Execution time Memory
749294 2023-05-27T17:24:23 Z amunduzbaev Sequence (APIO23_sequence) C++17
63 / 100
2000 ms 56364 KB
#include "sequence.h"

#include "bits/stdc++.h"
using namespace std;

#ifndef EVAL
#include "grader.cpp"
#endif
 
#define ar array
typedef long long ll;
//~ #define int ll
 
const int INF = 1e9;
 
struct ST{
	vector<int> min, max, p;
	int N;
	
	ST(){
		N = 5e5 + 5;
		min.resize(N << 2);
		max.resize(N << 2);
		p.resize(N << 2);
	}
	
	ST(int N): N(N) {
		min.resize(N << 2);
		max.resize(N << 2);
		p.resize(N << 2);
	}
	
	void push(int x, int lx, int rx){
		if(lx == rx) return;
		min[x << 1] += p[x], max[x << 1] += p[x], p[x << 1] += p[x];
		min[x << 1 | 1] += p[x], max[x << 1 | 1] += p[x], p[x << 1 | 1] += p[x];
		p[x] = 0;
	}
	
	void add(int l, int r, int v, int lx, int rx, int x){
		if(lx > r || rx < l) return;
		if(lx >= l && rx <= r){
			min[x] += v, max[x] += v, p[x] += v;
			return;
		}
		int m = (lx + rx) >> 1;
		push(x, lx, rx);
		add(l, r, v, lx, m, x << 1), add(l, r, v, m + 1, rx, x << 1 | 1);
		min[x] = ::min(min[x << 1], min[x << 1 | 1]);
		max[x] = ::max(max[x << 1], max[x << 1 | 1]);
	}
	
	void add(int l, int r, int v){
		add(l, r, v, 0, N, 1);
	}
	
	int Max(int l, int r, int lx, int rx, int x){
		if(lx > r || rx < l) return -INF;
		if(lx >= l && rx <= r) return max[x];
		int m = (lx + rx) >> 1;
		push(x, lx, rx);
		return ::max(Max(l, r, lx, m, x << 1), Max(l, r, m + 1, rx, x << 1 | 1));
	}
	
	int Max(int l, int r){
		return Max(l, r, 0, N, 1);
	}
	
	int Min(int l, int r, int lx, int rx, int x){
		if(lx > r || rx < l) return INF;
		if(lx >= l && rx <= r) return min[x];
		int m = (lx + rx) >> 1;
		push(x, lx, rx);
		return ::min(Min(l, r, lx, m, x << 1), Min(l, r, m + 1, rx, x << 1 | 1));
	}
	
	int Min(int l, int r){
		return Min(l, r, 0, N, 1);
	}
};
 

int sequence(int n, vector<int> a) {
	a.insert(a.begin(), 0);
	ST A, B;
	
	vector<int> p(n);
	iota(p.begin(), p.end(), 1);
	sort(p.begin(), p.end(), [&](int i, int j){
		if(a[i] != a[j]) return a[i] < a[j];
		return i < j;
	});
	
	for(int i=1;i<=n;i++){
		B.add(i, i, i);
		A.add(i, i, -i);
	}
	
	int res = 0;
	for(int i=0,j=0;i<n;){
		vector<int> pos;
		while(j < n && a[p[i]] == a[p[j]]){
			pos.push_back(p[j]);
			A.add(p[j], n, 2);
			j++;
		}
		
		auto check = [&](int m){
			for(int k=m - 1;k<(int)pos.size();k++){
				int l = k - m + 1, r = k;
				if(B.Max(pos[r], n) >= B.Min(0, pos[l] - 1) && A.Max(pos[r], n) >= A.Min(0, pos[l])) return true;
			}
			return false;
		};
		
		int l = 1, r = j - i;
		while(l < r){
			int m = (l + r + 1) >> 1;
			if(check(m)) l = m;
			else r = m - 1;
		}
		
		res = max(res, l);
		while(i < j){
			B.add(p[i], n, -2);
			i++;
		}
	}
	
	return res;
}

/*

7
1 2 3 1 2 1 3

9
1 1 2 3 4 3 2 1 1

14
2 6 2 5 3 4 2 1 4 3 5 6 3 2

*/
# Verdict Execution time Memory Grader output
1 Correct 21 ms 47224 KB Output is correct
2 Correct 21 ms 47244 KB Output is correct
3 Correct 21 ms 47208 KB Output is correct
4 Correct 20 ms 47172 KB Output is correct
5 Correct 23 ms 47356 KB Output is correct
6 Correct 22 ms 47188 KB Output is correct
7 Correct 21 ms 47232 KB Output is correct
8 Correct 19 ms 47188 KB Output is correct
9 Correct 21 ms 47216 KB Output is correct
10 Correct 20 ms 47288 KB Output is correct
11 Correct 23 ms 47268 KB Output is correct
12 Correct 26 ms 47208 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 47224 KB Output is correct
2 Correct 21 ms 47244 KB Output is correct
3 Correct 21 ms 47208 KB Output is correct
4 Correct 20 ms 47172 KB Output is correct
5 Correct 23 ms 47356 KB Output is correct
6 Correct 22 ms 47188 KB Output is correct
7 Correct 21 ms 47232 KB Output is correct
8 Correct 19 ms 47188 KB Output is correct
9 Correct 21 ms 47216 KB Output is correct
10 Correct 20 ms 47288 KB Output is correct
11 Correct 23 ms 47268 KB Output is correct
12 Correct 26 ms 47208 KB Output is correct
13 Correct 26 ms 47252 KB Output is correct
14 Correct 24 ms 47276 KB Output is correct
15 Correct 29 ms 47200 KB Output is correct
16 Correct 29 ms 47316 KB Output is correct
17 Correct 32 ms 47300 KB Output is correct
18 Correct 25 ms 47204 KB Output is correct
19 Correct 26 ms 47200 KB Output is correct
20 Correct 28 ms 47316 KB Output is correct
21 Correct 28 ms 47300 KB Output is correct
22 Correct 28 ms 47188 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 47224 KB Output is correct
2 Correct 1624 ms 53156 KB Output is correct
3 Correct 1679 ms 53228 KB Output is correct
4 Execution timed out 2062 ms 54180 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 21 ms 47244 KB Output is correct
2 Execution timed out 2051 ms 56364 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1474 ms 53184 KB Output is correct
2 Correct 1496 ms 53164 KB Output is correct
3 Correct 1610 ms 53160 KB Output is correct
4 Correct 1550 ms 53280 KB Output is correct
5 Correct 1677 ms 53156 KB Output is correct
6 Correct 1662 ms 53164 KB Output is correct
7 Correct 1612 ms 53160 KB Output is correct
8 Correct 1613 ms 53156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 47224 KB Output is correct
2 Correct 21 ms 47244 KB Output is correct
3 Correct 21 ms 47208 KB Output is correct
4 Correct 20 ms 47172 KB Output is correct
5 Correct 23 ms 47356 KB Output is correct
6 Correct 22 ms 47188 KB Output is correct
7 Correct 21 ms 47232 KB Output is correct
8 Correct 19 ms 47188 KB Output is correct
9 Correct 21 ms 47216 KB Output is correct
10 Correct 20 ms 47288 KB Output is correct
11 Correct 23 ms 47268 KB Output is correct
12 Correct 26 ms 47208 KB Output is correct
13 Correct 26 ms 47252 KB Output is correct
14 Correct 24 ms 47276 KB Output is correct
15 Correct 29 ms 47200 KB Output is correct
16 Correct 29 ms 47316 KB Output is correct
17 Correct 32 ms 47300 KB Output is correct
18 Correct 25 ms 47204 KB Output is correct
19 Correct 26 ms 47200 KB Output is correct
20 Correct 28 ms 47316 KB Output is correct
21 Correct 28 ms 47300 KB Output is correct
22 Correct 28 ms 47188 KB Output is correct
23 Correct 253 ms 48220 KB Output is correct
24 Correct 260 ms 48216 KB Output is correct
25 Correct 264 ms 48224 KB Output is correct
26 Correct 602 ms 48348 KB Output is correct
27 Correct 724 ms 48224 KB Output is correct
28 Correct 637 ms 48332 KB Output is correct
29 Correct 827 ms 48348 KB Output is correct
30 Correct 733 ms 48360 KB Output is correct
31 Correct 210 ms 48992 KB Output is correct
32 Correct 204 ms 48216 KB Output is correct
33 Correct 244 ms 48272 KB Output is correct
34 Correct 263 ms 48236 KB Output is correct
35 Correct 246 ms 48268 KB Output is correct
36 Correct 403 ms 48352 KB Output is correct
37 Correct 386 ms 48336 KB Output is correct
38 Correct 314 ms 48332 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 21 ms 47224 KB Output is correct
2 Correct 21 ms 47244 KB Output is correct
3 Correct 21 ms 47208 KB Output is correct
4 Correct 20 ms 47172 KB Output is correct
5 Correct 23 ms 47356 KB Output is correct
6 Correct 22 ms 47188 KB Output is correct
7 Correct 21 ms 47232 KB Output is correct
8 Correct 19 ms 47188 KB Output is correct
9 Correct 21 ms 47216 KB Output is correct
10 Correct 20 ms 47288 KB Output is correct
11 Correct 23 ms 47268 KB Output is correct
12 Correct 26 ms 47208 KB Output is correct
13 Correct 26 ms 47252 KB Output is correct
14 Correct 24 ms 47276 KB Output is correct
15 Correct 29 ms 47200 KB Output is correct
16 Correct 29 ms 47316 KB Output is correct
17 Correct 32 ms 47300 KB Output is correct
18 Correct 25 ms 47204 KB Output is correct
19 Correct 26 ms 47200 KB Output is correct
20 Correct 28 ms 47316 KB Output is correct
21 Correct 28 ms 47300 KB Output is correct
22 Correct 28 ms 47188 KB Output is correct
23 Correct 1624 ms 53156 KB Output is correct
24 Correct 1679 ms 53228 KB Output is correct
25 Execution timed out 2062 ms 54180 KB Time limit exceeded
26 Halted 0 ms 0 KB -