#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.begin(),arr.end());
SegmentTree seg(n);
for(auto& [d,v] : arr){
v*=-1;
int ma = seg.query(v+1, n);
seg.upd(v, ma+1);
}
cout << seg.query(0, n) << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |