Pagini recente » Cod sursa (job #1899591) | Rating Arminia Mihail (mihailarminia1234) | Cod sursa (job #2237839) | Cod sursa (job #1738454) | Cod sursa (job #732374)
Cod sursa(job #732374)
#include <fstream>
#include <algorithm>
#include <cstring>
#define NM 3510
using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
struct Cutie{int x,y,z;} C[NM];
inline 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,lsb[NM];
inline void Calc_lsb() {
for (i=1;i<=n;i++)
lsb[i]=(i&(-i));
}
inline 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;
}
inline 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;
}
inline 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,Calc_lsb();T;--T) {
Solve();
}
f.close();g.close();
return 0;
}