Pagini recente » Cod sursa (job #208034) | Cod sursa (job #1372856) | Cod sursa (job #16944) | Cod sursa (job #129249) | Cod sursa (job #1806579)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *fin = fopen("cutii.in","r");
FILE *fout = fopen("cutii.out","w");
int N, T;
struct cutie {
int x, y, z;
} V[3505];
vector <vector <int> > AIB;
bool cmp(cutie a, cutie b) {
if(a.x == b.x) {
return a.y < b.y;
}
return a.x < b.x;
}
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)) {
AIB[i][j] = max(AIB[i][j], val);
}
}
}
void Clr(int x, int y) {
for(int i = x; i <= N; i += i & (-i)) {
for(int j = y; j <= N; j += j & (-j)) {
AIB[i][j] = 0;
}
}
}
int Query(int x, int y) {
int ans = 0;
for(int i = x; i; i -= i & (-i)) {
for(int j = y; j; j -= j & (-j)) {
ans = max(ans, AIB[i][j]);
}
}
return ans;
}
int main() {
fscanf(fin, "%d %d\n", &N, &T);
while(T--) {
for(int i = 1; i <= N; ++i) {
fscanf(fin, "%d %d %d\n", &V[i].x, &V[i].y, &V[i].z);
}
sort(V + 1, V + 1 + N, cmp);
AIB.clear();
AIB.resize(N + 1, vector <int> (N + 1));
int mx = 0;
for(int i = 1; i <= N; ++i) {
int rez = Query(V[i].y, V[i].z);
mx = max(mx, rez + 1);
Update(V[i].y, V[i].z, rez + 1);
}
for(int i = 1; i <= N; ++i) {
Clr(V[i].y, V[i].z);
}
// if(T) {
// for(int i = 1; i <= N; ++i) {
// for(int j = 1; j <= N; ++j) {
// AIB[i][j] = 0;
// }
// }
// }
fprintf(fout, "%d\n", mx);
}
fclose(fin);
fclose(fout);
return 0;
}