Submission #1236045

#TimeUsernameProblemLanguageResultExecution timeMemory
1236045yixuan19Magic Tree (CEOI19_magictree)C++20
11 / 100
65 ms4280 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int decalage = (1<<20);
int tab[2*decalage];
void modify(int ind, int new_val){
    tab[ind] = new_val;
    while (ind > 1){
        ind/=2;
        tab[ind] = max(tab[ind*2], tab[ind*2+1]);
    }
}

int query(int l, int r){
    if (l == r) return tab[l];
    if (l%2 == 1){
        return max(tab[l], query(l+1,r));
    }
    if (r%2 == 0){
        return max(tab[r], query(l,r-1));
    }
    return query(l/2,r/2);
}

signed main(){
    int nb_vertices, nb_fruits, nb_max, parent;
    int location, day, juice;
    cin >> nb_vertices >> nb_fruits >> nb_max;
    for (int i = 2; i < nb_vertices+1; ++i){
        cin >> parent;
    }
    vector<pair<int,int> > fruits;
    int cnt = 0;
    for (int i = 0; i < nb_fruits; ++i){
        cin >> location >> day >> juice;
        if (day <= nb_max) fruits.push_back(make_pair(location,day));
    }
    sort(fruits.rbegin(), fruits.rend());
    // for (int i = 0; i < fruits.size(); ++i){
    //     cout<<fruits[i].first<<" "<<fruits[i].second<<" / ";
    // }
    // cout<<endl;
    int lis[fruits.size()];
    for (int i = 0; i < fruits.size(); ++i){
        lis[i] = 0;
    }
    lis[0] = 1;
    modify(fruits[0].second + decalage,1);
    for (int i = 1; i < fruits.size(); ++i){
        lis[i] = query(decalage,fruits[i].second+decalage) +1;
        modify(fruits[i].second+decalage,lis[i]);
        // for (int j = 0; j < fruits.size(); ++j){
        //     cout<<lis[j]<<" ";
        // }
        // cout<<endl;
    }
    for (int i = 0; i < fruits.size(); ++i){
        cnt = max(cnt, lis[i]);
    }
    cout<<cnt;
}



#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...