Pagini recente » Cod sursa (job #821786) | Cod sursa (job #2819127) | Cod sursa (job #3158388) | Cod sursa (job #1750016) | Cod sursa (job #1231111)
#include <fstream>
#include <algorithm>
#include <cstring>
#define DIM 3510
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
struct cutie {
int x;
int y;
int z;
};
int A[DIM][DIM];
int n, i, x, sol, t, y;
cutie v[DIM];
int cmp(const cutie &a, const cutie &b) {
return a.z<b.z;
}
int query(int x, int y) {
int r = 0;
for (int i=x;i;i-=(i&-i))
for (int j=y;j;j-=(j&-j))
r = max(r, A[i][j]);
return r;
}
void update(int x, int y, int z) {
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], z);
}
int main() {
fin>>n>>t;
for (;t--;) {
sol = 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++){
x = 1 + query(v[i].x-1, v[i].y-1);
update(v[i].x, v[i].y, x);
sol = max(sol, x);
}
fout<<sol<<"\n";
for (i=1;i<=n;i++)
for (x = v[i].x;x<=n;x+=(x&-x))
for (y=v[i].y; y<=n; y+=(y&-y))
A[x][y] = 0;
}
return 0;
}