Submission #1200076

#TimeUsernameProblemLanguageResultExecution timeMemory
1200076abbvsssSeptember (APIO24_september)C++20
0 / 100
1 ms320 KiB
#include <bits/stdc++.h>

using namespace std;

vector<int> tree;
vector<int> lazy;

void build(int v, int l, int r, int x){
    if (l == r){
        tree[v] = x;
        return;
    }
    int m = (l + r) / 2;

    build(2 * v + 1, l, m, x);
    build(2 * v + 2, m + 1, r, x);

    tree[v] = min(tree[2 * v + 1], tree[2 * v + 2]);
}

void push(int v) {
    tree[2 * v + 1] = lazy[v];
    lazy[2 * v + 1] = lazy[v];
    tree[2 * v + 2] = lazy[v];
    lazy[2 * v + 2] = lazy[v];
    lazy[v] = 0;
}

void update(int v, int tl, int tr, int l, int r, int addend) {
    if (l > r) 
        return;
    if (l == tl && tr == r) {
        tree[v] = addend;
        lazy[v] = addend;
    } else {
        push(v);
        int tm = (tl + tr) / 2;
        update(2 * v + 1, tl, tm, l, min(r, tm), addend);
        update(2 * v + 2, tm+1, tr, max(l, tm+1), r, addend);
        tree[v] = min(tree[2 * v + 1], tree[2 * v + 2]);
    }
}

int get(int v, int l, int r, int i){
    if (l == r) {
        return tree[v];
    } 
    int m = (l + r) / 2;
    if (i <= m) return get(2 * v + 1, l, m, i);
    return get(2 * v + 2, m + 1, r, i);
}

int solve(int n, int m, vector<int> F, vector<vector<int>> S){

    tree.resize(4 * n);
    lazy.resize(4 * n);

    build(0, 0, n - 1, -1);

    vector<vector<int>> idxs(n, vector<int> (m));

    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j ++){
            idxs[S[j][i]][j] = i;
        }
    }

    int k = 0;

    for (int i = 0; i < n; i++){
        if (get(0, 0, n - 1, i) != -1){
            int x = 0;
            for (int j = 0; j < m; j++){
                x = max(x, idxs[S[0][i]][j]);
            }
            update(0, 0, n - 1, i, x, k);
        }else{
            int x = 0;
            for (int j = 0; j < m; j++){
                x = max(x, idxs[S[0][i]][j]);
            }
            update(0, 0, n - 1, i, x, ++k);
        }
    }

    return k;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...