Submission #841175

# Submission time Handle Problem Language Result Execution time Memory
841175 2023-09-01T10:21:13 Z Hakiers Financial Report (JOI21_financial) C++17
0 / 100
1717 ms 20172 KB
#include <iostream>
#include <queue>
using namespace std;
const int BASE = 1 << 20;
const int BASE2 = 1 << 19;
int TREE[BASE << 1];
int LAZY[BASE << 1];
pair<int, int> TREE2[BASE2 << 1];
priority_queue<pair<int, int>> Q;

void push(int v, int l, int r){

    TREE[l] += LAZY[v];
    TREE[r] += LAZY[v];

    LAZY[l] += LAZY[v];
    LAZY[r] += LAZY[v];

    LAZY[v] = 0;
}

void add(int v, int l, int r, int a, int b, int val){
    if(r < a || b < l) return;
    else if(a <= l && r <= b){
        TREE[v] += val;
        LAZY[v] += val;
    }
    else{
        int mid = (l+r)/2;
        push(v, 2*v, 2*v + 1);

        add(2*v, l, mid, a, b, val);
        add(2*v + 1, mid+1, r, a, b, val);

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

int querymin(int v, int l, int r, int a, int b){
    if(r < a || b < l) return 1e9;
    else if(a <= l && r <= b)
        return TREE[v];
    else{
        int mid = (l+r)/2;
        push(v, 2*v, 2*v + 1);

        return min(querymin(2*v, l, mid, a, b), querymin(2*v + 1, mid+1, r, a, b));
    }
}

void update(int v, pair<int, int> val){
    v+= BASE2;
    TREE2[v] = val;
    v/=2;

    while (v > 0){
        int l = 2*v, r = 2*v + 1;

        if(TREE2[l].first == TREE2[r].second){
            if(TREE2[l].second < TREE2[r].second)
                TREE2[v] = TREE2[l];
            else TREE2[v] = TREE2[r];
        }
        else TREE2[v] = max(TREE2[l], TREE2[r]);

        v/=2;
    }
    
}

pair<int, int> query(int a, int b){

    a += BASE2 - 1;
    b += BASE2 + 1;

    pair<int, int> res = {0, 0};

    while(a/2 != b/2){

        if(a % 2 == 0) res = max(res, TREE2[a+1]);
        if(b % 2 == 0) res = max(res, TREE2[b-1]);

        a/=2; b/=2;
    }

    return res;
}

int BS(int idx){

    int l = 1, r = idx, mid;

    while(l < r){
        mid = (l + r)/2;
        if(querymin(1, 0, BASE-1, mid, idx)) r = mid;
        else l = mid + 1;
    }

    return l;
}

int solve(int d){
    int res = 0;

    while(Q.size()){

        auto [a, i] = Q.top();
        Q.pop();
        a = -a;
        i = -i;

        int idx = BS(i);

        pair<int, int> quer = query(idx, i);
        pair<int, int> val;

        val.first = quer.first;
        val.second = a;
        if(quer.second != a) val.first += 1;

        res = max(res, val.first);
        update(i, val);
        add(1, 0, BASE-1, i, i+d, 1);

    }

    return res;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, d;
    cin >> n >> d;

    for(int i = 1; i <= n; i++){
        int a;
        cin >> a;
        Q.push({-a, -i});
    }

    cout << solve(d) + 1 << "\n";
}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 468 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 468 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 468 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1666 ms 15228 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1717 ms 20172 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 468 KB Output isn't correct
2 Halted 0 ms 0 KB -