Pagini recente » Cod sursa (job #2544963) | Cod sursa (job #1396004) | Cod sursa (job #2310525) | Cod sursa (job #1903882) | Cod sursa (job #2323550)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
vector<pair<int,pair<int,int> > >elem;
pair<short,short> val[3505][3505];
int t,n,counter,ans;
void add(int x,int y,short sum)
{
for(int i=x;i<=n;i+=(i^(i-1))&i)
for(int j=y;j<=n;j+=(j^(j-1))&j)
if(val[i][j].second==t)
val[i][j].first=max(val[i][j].first,sum);
else
val[i][j]={sum,t};
}
short get_ans(int x,int y)
{
short rez=0;
for(int i=x;i>0;i-=(i^(i-1))&i)
for(int j=y;j>0;j-=(j^(j-1))&j)
if(val[i][j].second==t)
rez=max(rez,val[i][j].first);
return rez;
}
int main()
{
fin>>n>>t;
while(t--)
{
elem.clear();
int x,y,z;
for(int i=1;i<=n;i++)
{
fin>>x>>y>>z;
elem.push_back({x,{y,z}});
}
sort(elem.begin(),elem.end());
for(int i=0;i<n;i++)
{
short vl=get_ans(elem[i].second.first-1,elem[i].second.second-1)+1;
add(elem[i].second.first,elem[i].second.second,vl);
}
fout<<get_ans(n,n)<<"\n";
}
return 0;
}