Pagini recente » Cod sursa (job #427749) | Cod sursa (job #899518) | Cod sursa (job #2454556) | Cod sursa (job #1951889) | Cod sursa (job #2013537)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int T, n; //exceptional
struct cutie{
int x;
int y;
int z;
};
bool criteriu (const cutie a, const cutie b)
{
if(a.x==b.x)
{
if(a.y==b.y)
return a.z < b.z;
return a.y < b.y;
}
else return a.x < b.x;
}
int aib[3502][3502];
int query(int x, int y)
{
int maxim = 0;
for(int i=x;i>0;i-=i&-i)
for(int j=y;j>0;j-=j&-j)
if(aib[i][j]>maxim)
maxim=aib[i][j];
return maxim;
}
void update(int x, int y, int val)
{
for(int i=x;i<=n;i+=i&-i)
for(int j=y;j<=n;j+=j&-j)
if(val>aib[i][j])
aib[i][j]=val;
}
vector <cutie> cutii (3505);
int main()
{
ifstream in ("cutii.in");
ofstream out ("cutii.out");
int ans=0, val;
in>>n>>T;
cutie temp, nul;
nul.x=0;
nul.y=0;
nul.z=0;
cutii[n]=nul;
for(;T>0;--T)
{
for(int i=0;i<n;++i)
{
in>>temp.x>>temp.y>>temp.z;
cutii[i]=temp;
}
sort(cutii.begin(), cutii.begin()+n, criteriu);
//for(int i=0;i<n;++i)
// cout<<"("<<cutii[i].x<<","<<cutii[i].y<<","<<cutii[i].z<<") ";
//cout<<endl;
for(int i=0;i<n;++i)
{
//cout<<"Procesez cutia "<<i<<" ("<<cutii[i].x<<","<<cutii[i].y<<","<<cutii[i].z<<")\n";
val=query(cutii[i].y-1, cutii[i].z-1);
++val;
//cout<<"Query ("<<cutii[i].y-1<<","<<cutii[i].z-1<<") a returnat "<<val-1<<"\n";
if(val>ans)
ans=val;
if(cutii[i].x!=cutii[i+1].x)
for(int j=i;cutii[j].x==cutii[i].x;--j)
{
update(cutii[j].y, cutii[j].z, val);
// cout<<"Updatez poz curenta cu "<<ans<<"\n";
}
//cout<<"\n";
}
//clear aib
for(int cnt=0;cnt<n;++cnt)
for(int i=cutii[cnt].y;i<=n;i+=i&-i)
for(int j=cutii[cnt].z;j<=n;j+=j&-j)
aib[i][j]=0;
out<<ans<<"\n";
ans=0;
}
return 0;
}