Pagini recente » Cod sursa (job #2984957) | Cod sursa (job #1631360) | Cod sursa (job #1558655) | Cod sursa (job #2774291) | Cod sursa (job #1231316)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("cutii.in");
ofstream fout ("cutii.out");
int a[3510][3510];
int n,t,maxim,i,j,sum,k;
struct data {
int x;
int y;
int z;
}v[3510];
bool cmp (data x, data y) {
return x.z<y.z;
}
void update(int x,int y) {
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],sum+1);
}
void query (int x,int y) {
for (int i=x; i>0; i-=(i&(-i)))
for (int j=y;j>0;j-=(j&(-j)))
sum=max(sum,a[i][j]);
if (sum+1>maxim)
maxim=sum+1;
}
int main () {
fin>>n>>t;
while (t--) {
maxim=0;
for (i=1;i<=n;i++)
fin>>v[i].x>>v[i].y>>v[i].z;
sort (v+1,v+n+1,cmp);
for (i=1;i<=n;i++) {
sum=0;
query (v[i].x-1,v[i].y-1);
update (v[i].x,v[i].y);
}
fout<<maxim<<"\n";
for (i=1;i<=n;i++) {
for (k=v[i].x;k<=n;k+=(k&(-k)))
for (j=v[i].y;j<=n;j+=(j&(-j)))
a[k][j]=0;
}
}
return 0;
}