Pagini recente » Cod sursa (job #1937172) | Cod sursa (job #2039357) | Cod sursa (job #1929117) | Cod sursa (job #2760072) | Cod sursa (job #1655660)
#include <algorithm>
#include <fstream>
#include <cstring>
#include <cstdio>
#define NMAX 4000
using namespace std;
struct type {
int x , y , z;
} a[NMAX];
bool comp(type a , type b) {
return a.x < b.x || ((a.x == b.x && a.y < b.y) || (a.x == b.x && a.y == b.y && a.z < b.z));
}
int aib[NMAX][NMAX];
int n , T;
int query(int x , int y);
void update(int x , int y , int val);
void read(int &x) {
int sign = 1;
char ch;
x = 0;
while(!isdigit(ch = getchar())) {
if(ch == '-') {
sign = -1;
}
else {
sign = 1;
}
}
do {
x = x * 10 + ch - '0';
}while(isdigit(ch = getchar()));
x *= sign;
}
void zero(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 main() {
freopen("cutii.in" , "r" , stdin);
freopen("cutii.out" , "w" , stdout);
scanf("%d%d" , &n , &T);
while(T){
--T;
for(int i = 1 ; i <= n ; ++i) {
scanf("%d%d%d" , &a[i].x , &a[i].y , &a[i].z);
}
sort(a + 1 , a + n + 1 , comp);
for(int i = 1 ; i <= n ; ++i) {
int aux = query(a[i].y - 1 , a[i].z - 1);
update(a[i].y , a[i].z , aux + 1);
}
printf("%d\n" , query(n , n));
for(int i = 1 ; i <= n ; ++i) {
zero(a[i].y , a[i].z);
}
}
return 0;
}
int query(int x , int y) {
int sol = 0;
for(int i = x ; i >= 1 ; i -= i & (-i)) {
for(int j = y ; j >= 1 ; j -= j & (-j)) {
sol = max(aib[i][j] , sol);
}
}
return sol;
}
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);
}
}
}