Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e5 + 20;
- int t[4 * N], added[4 * N];
- vector<int> occ[N];
- void inc(int v, int tl, int tr, int l, int r, int val){
- if (l > r) return;
- if (tl == l && tr == r){
- t[v] += val, added[v] += val;
- return;
- }
- int tm = (tl + tr) / 2;
- inc(2 * v + 1, tl, tm, l, min(r, tm), val);
- inc(2 * v + 2, tm + 1, tr, max(l, tm + 1), r, val);
- t[v] = max(t[2 * v + 1], t[2 * v + 2]) + added[v];
- }
- int main(){
- int n;
- cin >> n;
- int ans = 0;
- for (int i = 0; i < n; i++){
- int x;
- cin >> x;
- if (!occ[x].empty()){
- int l = (occ[x].size() == 1? -1 : occ[x].end()[-2]) + 1, r = occ[x].back();
- inc(0, 0, n - 1, l, r, +1);
- if (occ[x].size() > 1){
- r = l - 1, l = (occ[x].size() == 2? -1 : occ[x].end()[-3]) + 1;
- inc(0, 0, n - 1, l, r, -1);
- }
- }
- occ[x].push_back(i);
- ans = max(ans, t[0]);
- }
- cout << ans << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement