Pagini recente » Cod sursa (job #1416920) | Cod sursa (job #1281369) | Cod sursa (job #2913751) | Cod sursa (job #505575) | Cod sursa (job #1231343)
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
int n,T;
int A[3511][3511];
struct cutie{
int x,y,z;
} v[3511];
int cmp(cutie a,cutie b){
return (a.z<b.z);
}
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)))
A[i][j]=max(A[i][j],val);
}
int query(int x,int y){
int rez=0;
for(int i=x;i>0;i-=(i&(-i)))
for(int j=y;j>0;j-=(j&(-j)))
rez=max(rez,A[i][j]);
return rez;
}
int main(void){
register int i,j,val,m,k;
f>>n>>T;
for(;T;T--){
for(i=1;i<=n;i++)
f>>v[i].x>>v[i].y>>v[i].z;
sort(v+1,v+n+1,cmp);
m=0;
for(i=1;i<=n;i++){
val=1+query(v[i].x-1,v[i].y-1);
m=max(m,val);
update(v[i].x,v[i].y,val);
}
g<<m<<"\n";
for(k=1;k<=n;k++)
for(i=v[k].x;i<=n;i+=(i&(-i)))
for(j=v[k].y;j<=n;j+=(j&(-j)))
A[i][j]=0;
}
f.close();
g.close();
return 0;
}