Pagini recente » Cod sursa (job #884446) | Cod sursa (job #157941) | Cod sursa (job #2500946) | Cod sursa (job #1203618) | Cod sursa (job #2957576)
#include <iostream>
#include <fstream>
#include <algorithm>
#define MAX 3502
using namespace std;
int t,n,dp[MAX];
int aib[MAX][MAX];
ifstream fin("cutii.in");
ofstream fout("cutii.out");
struct cutie{
int x,y,z;
} c[MAX];
bool cmp(cutie c1, cutie c2){
return (c1.x < c2.x);
}
void update(int x, int y, int val){
for(int i = x; i < MAX; i += (i&-i)){
for(int j = y; j < MAX; j += (j&-j)){
aib[i][j] = max(aib[i][j], val);
if(val == -1){
aib[i][j] = 0;
}
}
}
}
int query(int x, int y){
int ans = 0;
for(int i = x; i > 0; i -= (i&-i)){
for(int j = y; j > 0; j -= (j&-j)){
ans = max(ans, aib[i][j]);
}
}
return ans;
}
void solve(){
for(int i = 1; i <= n; i++){
fin >> c[i].x >> c[i].y >> c[i].z;
}
sort(c+1, c+n+1, cmp);
int ans = 0;
for(int i = 1; i <= n; i++){
int t = query(c[i].y-1, c[i].z-1);
dp[i] = t+1;
if(dp[i] > ans){
ans = dp[i];
}
update(c[i].y, c[i].z, dp[i]);
}
fout << ans << "\n";
for(int i = 1; i <= n; i++){
update(c[i].y, c[i].z, -1);
}
}
int main()
{
fin >> n >> t;
while(t--){
solve();
}
return 0;
}