Pagini recente » Cod sursa (job #2732916) | Cod sursa (job #540340) | Cod sursa (job #722611) | Cod sursa (job #2664603) | Cod sursa (job #1814132)
#include <fstream>
#include <algorithm>
#define x first
#define y second.x
#define z second.second
#define ub(i) (i & (-i))
using namespace std;
ifstream f ("cutii.in");
ofstream g ("cutii.out");
pair<int,pair<int,int>> v[3503];
int N, T, AIB[3150][3150];
void add(int p1, int p2) {
for(int i = p1; i <= N; i += ub(i))
for(int j = p2; j <= N; j += ub(j))
AIB[i][j] = max(AIB[i][j], AIB[p1][p2]);
}
int query(int p1, int p2) {
int rez = 0;
for(int i = p1 - 1; i >= 1; i -= ub(i))
for(int j = p2 - 1; j >= 1; j -= ub(j))
rez = max(rez, AIB[i][j]);
return rez;
}
void del(int p1, int p2) {
for(int i = p1; i <= N; i += ub(i))
for(int j = p2; j <= N; j += ub(j))
AIB[i][j] = false;
}
int main()
{
f >> N >> T;
for(; T >= 1; T--) {
for(int i = 1; i <= N; i++)
f >> v[i].x >> v[i].y >> v[i].z;
sort(v+1, v+N+1);
int MAX = 0;
for(int i = 1; i <= N; i++) {
int x = query(v[i].y, v[i].z) + 1;
AIB[v[i].y][v[i].z] = x;
add(v[i].y, v[i].z);
MAX = max(MAX, x);
}
for(int i = 1; i <= N; i++)
del(v[i].y, v[i].z);
g << MAX << "\n";
}
return 0;
}