#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
const int maxn=1e5+5;
int N,tree[maxn],a[maxn],U;
struct DM
{
int x,y,val;
}num[maxn];
bool cmp(DM a,DM b)
{
if(a.x==b.x)return a.y>b.y;
return a.x<b.x;
}
void update(int i,int x)
{
while(i<=U)
{
tree[i]=max(tree[i],x);
i+=(i&-i);
}
}
int query(int i)
{
int sum=0;
while(i)
{
sum=max(sum,tree[i]);
i-=(i&-i);
}
return sum;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
scanf("%d%d%d",&num[i].x,&num[i].y,&num[i].val);
a[i]=num[i].y;
}
sort(a+1,a+1+N);
sort(num+1,num+1+N,cmp);
U=unique(a+1,a+1+N)-a-1;
memset(tree,0,sizeof(tree));
int ans=0;
for(int i=1;i<=N;i++)
{
int k=lower_bound(a+1,a+1+U,num[i].y)-a;
int res=query(k-1)+num[i].val;
ans=max(ans,res);
update(k,res);
}
printf("%d\n",ans);
}
return 0;
}
07-12
07-12
07-12
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交