Submission #760137

# Submission time Handle Problem Language Result Execution time Memory
760137 2023-06-17T08:24:41 Z 8e7 Sequence (APIO23_sequence) C++17
31 / 100
2000 ms 60204 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;
    			}
    		};
    		int low = 0, 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 11988 KB Output is correct
3 Correct 6 ms 11988 KB Output is correct
4 Correct 5 ms 11988 KB Output is correct
5 Correct 5 ms 11988 KB Output is correct
6 Correct 6 ms 12028 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 7 ms 11996 KB Output is correct
11 Correct 7 ms 11988 KB Output is correct
12 Correct 5 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 11988 KB Output is correct
3 Correct 6 ms 11988 KB Output is correct
4 Correct 5 ms 11988 KB Output is correct
5 Correct 5 ms 11988 KB Output is correct
6 Correct 6 ms 12028 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 7 ms 11996 KB Output is correct
11 Correct 7 ms 11988 KB Output is correct
12 Correct 5 ms 11988 KB Output is correct
13 Correct 12 ms 12268 KB Output is correct
14 Correct 8 ms 12244 KB Output is correct
15 Correct 9 ms 12244 KB Output is correct
16 Correct 9 ms 12244 KB Output is correct
17 Correct 9 ms 12116 KB Output is correct
18 Correct 9 ms 12276 KB Output is correct
19 Correct 8 ms 12260 KB Output is correct
20 Correct 8 ms 12244 KB Output is correct
21 Incorrect 8 ms 12244 KB Output isn't correct
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Correct 756 ms 54480 KB Output is correct
3 Correct 798 ms 54468 KB Output is correct
4 Correct 674 ms 46648 KB Output is correct
5 Correct 761 ms 53532 KB Output is correct
6 Correct 738 ms 53424 KB Output is correct
7 Correct 651 ms 46896 KB Output is correct
8 Correct 1006 ms 47164 KB Output is correct
9 Correct 553 ms 46652 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Correct 1745 ms 46780 KB Output is correct
3 Execution timed out 2069 ms 46644 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1105 ms 60204 KB Output is correct
2 Correct 1081 ms 60192 KB Output is correct
3 Correct 1161 ms 59628 KB Output is correct
4 Correct 1065 ms 59620 KB Output is correct
5 Correct 962 ms 56388 KB Output is correct
6 Correct 994 ms 56292 KB Output is correct
7 Correct 773 ms 55088 KB Output is correct
8 Correct 776 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 11988 KB Output is correct
3 Correct 6 ms 11988 KB Output is correct
4 Correct 5 ms 11988 KB Output is correct
5 Correct 5 ms 11988 KB Output is correct
6 Correct 6 ms 12028 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 7 ms 11996 KB Output is correct
11 Correct 7 ms 11988 KB Output is correct
12 Correct 5 ms 11988 KB Output is correct
13 Correct 12 ms 12268 KB Output is correct
14 Correct 8 ms 12244 KB Output is correct
15 Correct 9 ms 12244 KB Output is correct
16 Correct 9 ms 12244 KB Output is correct
17 Correct 9 ms 12116 KB Output is correct
18 Correct 9 ms 12276 KB Output is correct
19 Correct 8 ms 12260 KB Output is correct
20 Correct 8 ms 12244 KB Output is correct
21 Incorrect 8 ms 12244 KB Output isn't correct
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 11988 KB Output is correct
2 Correct 6 ms 11988 KB Output is correct
3 Correct 6 ms 11988 KB Output is correct
4 Correct 5 ms 11988 KB Output is correct
5 Correct 5 ms 11988 KB Output is correct
6 Correct 6 ms 12028 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 7 ms 11996 KB Output is correct
11 Correct 7 ms 11988 KB Output is correct
12 Correct 5 ms 11988 KB Output is correct
13 Correct 12 ms 12268 KB Output is correct
14 Correct 8 ms 12244 KB Output is correct
15 Correct 9 ms 12244 KB Output is correct
16 Correct 9 ms 12244 KB Output is correct
17 Correct 9 ms 12116 KB Output is correct
18 Correct 9 ms 12276 KB Output is correct
19 Correct 8 ms 12260 KB Output is correct
20 Correct 8 ms 12244 KB Output is correct
21 Incorrect 8 ms 12244 KB Output isn't correct
22 Halted 0 ms 0 KB -