Submission #1271911

#TimeUsernameProblemLanguageResultExecution timeMemory
1271911marshziinGlobal Warming (CEOI18_glo)C++20
0 / 100
374 ms25236 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define pii pair<int,int>

const int maxn = 2e5 + 10;
int A[maxn];
int L[maxn], R[maxn];

//seg
int tree[4 * maxn];
void reset() {
    for (int i = 0; i < 4*maxn; i++) tree[i] = 0;
}

void update(int node, int l, int r, int pos, int val) {
    if(l == r) {
        tree[node] = val;
        return;
    }

    int mid = (l + r) / 2;
    if(pos <= mid) update(2 * node, l, mid, pos, val);
    else update(2 * node + 1, mid + 1, r, pos, val);
    
    tree[node] = tree[2 * node] + tree[2 * node + 1];
    return;
}

int query(int node, int tl, int tr, int l, int r) {
    if(tl > r || tr < l) return 0;
    if(tl >= l && tr <= r) return tree[node];

    int mid = (tl + tr) / 2;
    return max(query(2 * node, tl, mid, l, r), query(2 * node + 1, mid + 1, tr, l, r));
}


int32_t main() {
    ios_base::sync_with_stdio(false); cin.tie(0);
    int n, m; cin >> n >> m;
    vector<int> ord;
    for (int i = 1; i <= n; i++) {
        cin >> A[i];
        ord.push_back(A[i]);
    }
    map<int,int> comp;
    sort(ord.begin(), ord.end());
    ord.erase(unique(ord.begin(), ord.end()), ord.end());
    int id = 1;
    for (auto x : ord) comp[x] = id++;

    for (int i = 1; i <= n; i++) {
        int aux = query(1, 1, n, 1, comp[A[i]] - 1);
        L[i] = aux + 1;
        update(1, 1, n, comp[A[i]], L[i]);
    }

    reset();
    for (int i = n; i >= 1; i--) {
        int aux = query(1, 1, n, comp[A[i]] + 1, n);
        R[i] = aux + 1;
        update(1, 1, n, comp[A[i]], R[i]);
    }   

    int res = 0;
    for (int i = 1; i <= n; i++) res = max(res, L[i] + R[i] - 1);
    cout << res << '\n';

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...