제출 #1236045

#제출 시각아이디문제언어결과실행 시간메모리
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...