Pagini recente » Cod sursa (job #1070285) | Cod sursa (job #2784261) | Cod sursa (job #1235775) | Cod sursa (job #2891873) | Cod sursa (job #341919)
Cod sursa(job #341919)
#include <cstdio>
using namespace std;
int N;
int BIT[3501][3501];
int bitR (int x, int y1) {
int y, m=0;
for ( ; 0<x; x-=(x&(-x)) ) {
for ( y=y1; 0<y; y-=(y&(-y)) ) {
if (m<BIT[x][y]) {
m=BIT[x][y];
}
}
}
return m;
}
void bitC (int x, int y1) {
int y;
for ( ; 0<x; x-=(x&(-x)) ) {
for ( y=y1; 0<y; y-=(y&(-y)) ) {
BIT[x][y]=0;
}
}
}
void bitW (int x, int y1, int v) {
int y;
for ( ; N>=x; x+=(x&(-x)) ) {
for ( y=y1; N>=y; y+=(y&(-y)) ) {
if (v>BIT[x][y]) {
BIT[x][y]=v;
}
}
}
}
struct Cu { int x, y, z; }; Cu C[3500]; int Z[3501];
int
main ( ) {
FILE * f, * g ;
f=fopen("cutii.in", "r");
g=fopen("cutii.out", "w");
int T, s, m, k;
fscanf (f, "%d %d", &N, &T);
for ( ;0<T; --T ) {
for ( s=0; N>s; ++s ) {
fscanf (f, "%d %d %d", &C[s].x, &C[s].y, &C[s].z); Z[C[s].z]=s;
}
for ( s=0; N>s; ++s ) { bitC(C[s].x-1, C[s].y-1); } k=0;
for ( s=1; N>=s; ++s ) {
Cu & c=C[Z[s]]; m=1+bitR(c.x-1, c.y-1); if(m>k) {k=m;}
bitW(c.x,c.y,m);
}
fprintf (g, "%d\n", k);
}
fclose(f); fclose(g); return 0;
}