Pagini recente » Cod sursa (job #1996263) | Cod sursa (job #2225518) | Monitorul de evaluare | Statistici Zubascu Oana (OanaMaria) | Cod sursa (job #732372)
Cod sursa(job #732372)
#include <fstream>
#include <algorithm>
#include <cstring>
#define lsb(a) (a&(-a))
#define NM 3510
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
struct Cutie{int x,y,z;} C[NM];
bool comp(Cutie a,Cutie b) {
if (a.x!=b.x) return a.x<b.x;
if (a.y!=b.y) return a.y<b.y;
return a.z<b.z;
}
int T,n,i,AIB[NM][NM],ANS,v;
int Query(int x,int y) {
int i,j,ANS=0;
for (i=x;i>=1;i-=lsb(i))
for (j=y;j>=1;j-=lsb(j))
ANS=max(ANS,AIB[i][j]);
return ANS;
}
void Update(int x,int y,int v) {
int i,j;
for (i=x;i<=n;i+=lsb(i))
for (j=y;j<=n;j+=lsb(j))
AIB[i][j]=max(AIB[i][j],v);
return;
}
void Solve() {
memset(AIB,0,sizeof(AIB));
ANS=0;
for (i=1;i<=n;i++)
f >> C[i].x >> C[i].y >> C[i].z;
sort(C+1,C+n+1,comp);
for (i=1;i<=n;i++) {
v=1+Query(C[i].x-1,C[i].y-1);
Update(C[i].x,C[i].y,v);
ANS=max(ANS,v);
}
g << ANS << '\n';
return;
}
int main() {
for (f >> n >> T;T;--T) {
Solve();
}
f.close();g.close();
return 0;
}