제출 #1246951

#제출 시각아이디문제언어결과실행 시간메모리
1246951KindaGoodGamesMagic Tree (CEOI19_magictree)C++20
0 / 100
78 ms4020 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> struct SegmentTree{ int len = 1; vector<int> S; SegmentTree(int n){ while(len < n){ len <<= 1; } S.resize(2*len); } void upd(int i, int v){ i += len; S[i] = v; for(i /= 2; i > 0; i /= 2){ S[i] = max(S[i*2], S[i*2+1]); } } int query(int ql, int qr, int l = 0, int r = -2, int i=1){ if(r == -2) r = len; if(ql <= l && r <= qr) return S[i]; if(r <= ql || qr <= l) return 0; int mid = (l+r)/2; return max(query(ql,qr,l,mid,i*2), query(ql,qr,mid,r,i*2+1)); } }; int n, m, k; int32_t main(){ cin >> n >> m >> k; for(int i = 1; i < n; i++){ int p; cin >> p; } vector<pii> arr; for(int i = 0; i <m; i++){ int v, d, w; cin >> v >> d >>w; v--; arr.push_back({d,v}); } sort(arr.rbegin(),arr.rend()); SegmentTree seg(n); for(auto& [d,v] : arr){ int ma = seg.query(v+1, n); seg.upd(v, ma+1); } cout << seg.query(0, n) << endl; }
#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...