Submission #750019

# Submission time Handle Problem Language Result Execution time Memory
750019 2023-05-29T04:24:28 Z Cookie Sequence (APIO23_sequence) C++17
100 / 100
1139 ms 64636 KB
#include<bits/stdc++.h>
#include "sequence.h"
#include<fstream>
using namespace std;
ifstream fin("VNOICUP.INP");
ofstream fout("VNOICUP.OUT");
#define sz(a) (int)a.size()
#define ll long long
#define pb push_back
#define forr(i, a, b) for(int i = a; i < b; i++)
#define dorr(i, a, b) for(int i = a; i >= b; i--)
#define ld long double
#define vt vector
#include<fstream>
#define fi first
#define se second
#define pll pair<ll, ll>
#define pii pair<int, int>
const int mxn = 5e5;
const ll prec = 1e-6;
struct ST{
    // range min prefix, range update
    int st[4 * mxn + 1], lz[4 * mxn + 1];
    void push(int nd, int l, int mid, int r){
        lz[nd << 1] += lz[nd]; lz[nd << 1 | 1] += lz[nd];
        st[nd << 1] += lz[nd]; st[nd << 1 | 1] += lz[nd];
        lz[nd] = 0;
    }
    void init(int nd, int l, int r){
        if(l == r){
            st[nd] = -l;
            return;
        }
        int mid = (l + r) >> 1;
        init(nd << 1, l, mid); init(nd << 1 | 1, mid + 1, r);
        st[nd] = min(st[nd << 1], st[nd << 1 | 1]);
    }
    void upd(int nd, int l, int r, int ql, int qr, int v){
        if(ql > r || qr < l)return;
        if(ql <= l && qr >= r){
            st[nd] += v; lz[nd] += v;
            return;
        }
        int mid = (l + r) >> 1;
        push(nd, l, mid, r);
        upd(nd << 1, l, mid, ql, qr, v); upd(nd << 1 | 1, mid + 1, r, ql, qr, v);
        st[nd] = min(st[nd << 1], st[nd << 1 | 1]);
    }
    int get(int nd, int l, int r, int ql, int qr){
        if(ql > r || qr < l)return(1e9);
        if(ql <= l && qr >= r)return(st[nd]);
        int mid = (l + r) >> 1;
        push(nd, l, mid, r);
        return(min(get(nd << 1, l, mid, ql, qr), get(nd << 1 | 1, mid + 1, r, ql, qr)));
    }
};
struct ST2{
    // range max prefix, range update
    int st[4 * mxn + 1], lz[4 * mxn + 1];
    void push(int nd, int l, int mid, int r){
        lz[nd << 1] += lz[nd]; lz[nd << 1 | 1] += lz[nd];
        st[nd << 1] += lz[nd]; st[nd << 1 | 1] += lz[nd];
        lz[nd] = 0;
        return;
    }
    void init(int nd, int l, int r){
        if(l == r){
            st[nd] = -l;
            return;
        }
        int mid = (l + r) >> 1;
        init(nd << 1, l, mid); init(nd << 1 | 1, mid + 1, r);
        st[nd] = max(st[nd << 1], st[nd << 1 | 1]);
    }
    void upd(int nd, int l, int r, int ql, int qr, int v){
        if(ql > r || qr < l)return;
        if(ql <= l && qr >= r){
            st[nd] += v; lz[nd] += v;
            return;
        }
        int mid = (l + r) >> 1;
        push(nd, l, mid, r);
        upd(nd << 1, l, mid, ql, qr, v); upd(nd << 1 | 1, mid + 1, r, ql, qr, v);
        st[nd] = max(st[nd << 1], st[nd << 1 | 1]);
    }
    int get(int nd, int l, int r, int ql, int qr){
        if(ql > r || qr < l)return(-1e9);
        if(ql <= l && qr >= r)return(st[nd]);
        int mid = (l + r) >> 1;
        push(nd, l, mid, r);
        return(max(get(nd << 1, l, mid, ql, qr), get(nd << 1 | 1, mid + 1, r, ql, qr)));
    }
};
ST large, equa;
ST2 large2, equa2;
vt<int>comp[mxn + 1];
int sequence(int n, std::vector<int> a) {
   large.init(1, 0, n); equa.init(1, 0, n); large2.init(1, 0, n); equa2.init(1, 0, n);
   for(int i = 0; i < n; i++){
       comp[a[i]].pb(i + 1);
   }
   int ans = 1;
   
   for(int i = 1; i <= n; i++){
       for(auto j: comp[i]){
           equa.upd(1, 0, n, j, n, 2); equa2.upd(1, 0, n, j, n,2);
       }
       
       int r = 1;
       for(int j = 0; j < sz(comp[i]) - 1; j++){
           r = max(r, j + 1);
           
           while(r < sz(comp[i])){
               ll lar = large.get(1, 0, n, comp[i][r], n) - large2.get(1, 0, n, 0, comp[i][j] - 1);
               ll equ = equa2.get(1, 0, n, comp[i][r], n) - equa.get(1, 0, n, 0, comp[i][j] - 1);
               //if(i == 1 && j = 0)
               if(equ >= 0 && lar <= 0){
                   r++;
               }else{
                   break;
               }
           }
           
           ans = max(ans, r - j);
       }
       
       for(auto j: comp[i]){
           large.upd(1, 0, n, j, n,2); large2.upd(1, 0, n, j, n,2);
       }
   }
   
  return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 6 ms 12116 KB Output is correct
2 Correct 7 ms 12072 KB Output is correct
3 Correct 7 ms 12116 KB Output is correct
4 Correct 7 ms 12116 KB Output is correct
5 Correct 7 ms 12116 KB Output is correct
6 Correct 7 ms 12044 KB Output is correct
7 Correct 7 ms 12032 KB Output is correct
8 Correct 7 ms 12116 KB Output is correct
9 Correct 6 ms 12116 KB Output is correct
10 Correct 7 ms 12032 KB Output is correct
11 Correct 6 ms 12116 KB Output is correct
12 Correct 6 ms 12116 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 12116 KB Output is correct
2 Correct 7 ms 12072 KB Output is correct
3 Correct 7 ms 12116 KB Output is correct
4 Correct 7 ms 12116 KB Output is correct
5 Correct 7 ms 12116 KB Output is correct
6 Correct 7 ms 12044 KB Output is correct
7 Correct 7 ms 12032 KB Output is correct
8 Correct 7 ms 12116 KB Output is correct
9 Correct 6 ms 12116 KB Output is correct
10 Correct 7 ms 12032 KB Output is correct
11 Correct 6 ms 12116 KB Output is correct
12 Correct 6 ms 12116 KB Output is correct
13 Correct 8 ms 12244 KB Output is correct
14 Correct 14 ms 12248 KB Output is correct
15 Correct 10 ms 12244 KB Output is correct
16 Correct 9 ms 12244 KB Output is correct
17 Correct 9 ms 12244 KB Output is correct
18 Correct 7 ms 12244 KB Output is correct
19 Correct 8 ms 12176 KB Output is correct
20 Correct 10 ms 12244 KB Output is correct
21 Correct 8 ms 12244 KB Output is correct
22 Correct 8 ms 12244 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 12116 KB Output is correct
2 Correct 523 ms 58724 KB Output is correct
3 Correct 612 ms 58788 KB Output is correct
4 Correct 682 ms 51004 KB Output is correct
5 Correct 567 ms 57708 KB Output is correct
6 Correct 528 ms 57960 KB Output is correct
7 Correct 634 ms 51492 KB Output is correct
8 Correct 690 ms 51404 KB Output is correct
9 Correct 620 ms 51004 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 12072 KB Output is correct
2 Correct 772 ms 51120 KB Output is correct
3 Correct 839 ms 51084 KB Output is correct
4 Correct 841 ms 50912 KB Output is correct
5 Correct 795 ms 51080 KB Output is correct
6 Correct 782 ms 51000 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 655 ms 64636 KB Output is correct
2 Correct 669 ms 64580 KB Output is correct
3 Correct 642 ms 63888 KB Output is correct
4 Correct 640 ms 63948 KB Output is correct
5 Correct 595 ms 60612 KB Output is correct
6 Correct 557 ms 60596 KB Output is correct
7 Correct 485 ms 59340 KB Output is correct
8 Correct 487 ms 59084 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 12116 KB Output is correct
2 Correct 7 ms 12072 KB Output is correct
3 Correct 7 ms 12116 KB Output is correct
4 Correct 7 ms 12116 KB Output is correct
5 Correct 7 ms 12116 KB Output is correct
6 Correct 7 ms 12044 KB Output is correct
7 Correct 7 ms 12032 KB Output is correct
8 Correct 7 ms 12116 KB Output is correct
9 Correct 6 ms 12116 KB Output is correct
10 Correct 7 ms 12032 KB Output is correct
11 Correct 6 ms 12116 KB Output is correct
12 Correct 6 ms 12116 KB Output is correct
13 Correct 8 ms 12244 KB Output is correct
14 Correct 14 ms 12248 KB Output is correct
15 Correct 10 ms 12244 KB Output is correct
16 Correct 9 ms 12244 KB Output is correct
17 Correct 9 ms 12244 KB Output is correct
18 Correct 7 ms 12244 KB Output is correct
19 Correct 8 ms 12176 KB Output is correct
20 Correct 10 ms 12244 KB Output is correct
21 Correct 8 ms 12244 KB Output is correct
22 Correct 8 ms 12244 KB Output is correct
23 Correct 120 ms 22484 KB Output is correct
24 Correct 124 ms 22532 KB Output is correct
25 Correct 116 ms 22540 KB Output is correct
26 Correct 139 ms 21588 KB Output is correct
27 Correct 139 ms 21608 KB Output is correct
28 Correct 140 ms 21600 KB Output is correct
29 Correct 130 ms 21324 KB Output is correct
30 Correct 126 ms 21424 KB Output is correct
31 Correct 97 ms 21284 KB Output is correct
32 Correct 64 ms 23372 KB Output is correct
33 Correct 125 ms 22468 KB Output is correct
34 Correct 119 ms 22356 KB Output is correct
35 Correct 121 ms 22276 KB Output is correct
36 Correct 119 ms 22208 KB Output is correct
37 Correct 117 ms 22300 KB Output is correct
38 Correct 123 ms 22372 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 12116 KB Output is correct
2 Correct 7 ms 12072 KB Output is correct
3 Correct 7 ms 12116 KB Output is correct
4 Correct 7 ms 12116 KB Output is correct
5 Correct 7 ms 12116 KB Output is correct
6 Correct 7 ms 12044 KB Output is correct
7 Correct 7 ms 12032 KB Output is correct
8 Correct 7 ms 12116 KB Output is correct
9 Correct 6 ms 12116 KB Output is correct
10 Correct 7 ms 12032 KB Output is correct
11 Correct 6 ms 12116 KB Output is correct
12 Correct 6 ms 12116 KB Output is correct
13 Correct 8 ms 12244 KB Output is correct
14 Correct 14 ms 12248 KB Output is correct
15 Correct 10 ms 12244 KB Output is correct
16 Correct 9 ms 12244 KB Output is correct
17 Correct 9 ms 12244 KB Output is correct
18 Correct 7 ms 12244 KB Output is correct
19 Correct 8 ms 12176 KB Output is correct
20 Correct 10 ms 12244 KB Output is correct
21 Correct 8 ms 12244 KB Output is correct
22 Correct 8 ms 12244 KB Output is correct
23 Correct 523 ms 58724 KB Output is correct
24 Correct 612 ms 58788 KB Output is correct
25 Correct 682 ms 51004 KB Output is correct
26 Correct 567 ms 57708 KB Output is correct
27 Correct 528 ms 57960 KB Output is correct
28 Correct 634 ms 51492 KB Output is correct
29 Correct 690 ms 51404 KB Output is correct
30 Correct 620 ms 51004 KB Output is correct
31 Correct 772 ms 51120 KB Output is correct
32 Correct 839 ms 51084 KB Output is correct
33 Correct 841 ms 50912 KB Output is correct
34 Correct 795 ms 51080 KB Output is correct
35 Correct 782 ms 51000 KB Output is correct
36 Correct 655 ms 64636 KB Output is correct
37 Correct 669 ms 64580 KB Output is correct
38 Correct 642 ms 63888 KB Output is correct
39 Correct 640 ms 63948 KB Output is correct
40 Correct 595 ms 60612 KB Output is correct
41 Correct 557 ms 60596 KB Output is correct
42 Correct 485 ms 59340 KB Output is correct
43 Correct 487 ms 59084 KB Output is correct
44 Correct 120 ms 22484 KB Output is correct
45 Correct 124 ms 22532 KB Output is correct
46 Correct 116 ms 22540 KB Output is correct
47 Correct 139 ms 21588 KB Output is correct
48 Correct 139 ms 21608 KB Output is correct
49 Correct 140 ms 21600 KB Output is correct
50 Correct 130 ms 21324 KB Output is correct
51 Correct 126 ms 21424 KB Output is correct
52 Correct 97 ms 21284 KB Output is correct
53 Correct 64 ms 23372 KB Output is correct
54 Correct 125 ms 22468 KB Output is correct
55 Correct 119 ms 22356 KB Output is correct
56 Correct 121 ms 22276 KB Output is correct
57 Correct 119 ms 22208 KB Output is correct
58 Correct 117 ms 22300 KB Output is correct
59 Correct 123 ms 22372 KB Output is correct
60 Correct 1028 ms 58848 KB Output is correct
61 Correct 1010 ms 58756 KB Output is correct
62 Correct 1024 ms 58856 KB Output is correct
63 Correct 1091 ms 52172 KB Output is correct
64 Correct 1139 ms 52044 KB Output is correct
65 Correct 1105 ms 52032 KB Output is correct
66 Correct 832 ms 51016 KB Output is correct
67 Correct 837 ms 51312 KB Output is correct
68 Correct 669 ms 50956 KB Output is correct
69 Correct 400 ms 64448 KB Output is correct
70 Correct 993 ms 57980 KB Output is correct
71 Correct 992 ms 57668 KB Output is correct
72 Correct 970 ms 57220 KB Output is correct
73 Correct 1014 ms 57668 KB Output is correct
74 Correct 1052 ms 57148 KB Output is correct
75 Correct 1056 ms 57552 KB Output is correct