Pagini recente » Cod sursa (job #2684276) | Cod sursa (job #1086391) | Cod sursa (job #2807697) | Cod sursa (job #2127421) | Cod sursa (job #2643975)
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
vector <int> Ys[3501];
vector <int> aib[3501];
struct mazan
{
int x,y,z;
} v[3501];
int n;
int lsb(int x)
{
return x&-x;
}
bool cmp(mazan a,mazan b)
{
return a.x<b.x;
}
void upd(int x,int y,int val)
{
for(; x<=n; x+=lsb(x))
{
int normy=1+(lower_bound(Ys[x].begin(),Ys[x].end(),y)-Ys[x].begin());
for(; normy<=Ys[x].size(); normy+=lsb(normy))
if(val>0)
aib[x][normy]=max(aib[x][normy],val);
else
aib[x][normy]=0;
}
}
int ans(int x,int y)
{
int max1=0;
for(; x>0; x-=lsb(x))
{
int normy=1+(upper_bound(Ys[x].begin(),Ys[x].end(),y)-Ys[x].begin())-1;
for(; normy>0; normy-=lsb(normy))
max1=max(max1,aib[x][normy]);
}
return max1;
}
int main()
{
int t,i,max1,x,j;
in>>n>>t;
while(t--)
{
max1=0;
for(i=1; i<=n; i++)
{
in>>v[i].x>>v[i].y>>v[i].z;
Ys[v[i].y].push_back(v[i].z);
}
for(i=1; i<=n; i++)
{
aib[i].resize(Ys[i].size()+1,0);
sort(Ys[i].begin(),Ys[i].end());
}
sort(v+1,v+n+1,cmp);
for(i=1; i<=n; i++)
{
x=ans(v[i].y,v[i].z)+1;
max1=max(max1,x);
upd(v[i].y,v[i].z,x);
}
for(i=1; i<=n; i++)
upd(v[i].y,v[i].z,-1);
out<<max1<<'\n';
}
return 0;
}