Pagini recente » Cod sursa (job #496537) | Cod sursa (job #958959) | Cod sursa (job #2636306) | Cod sursa (job #1926340) | Cod sursa (job #780472)
Cod sursa(job #780472)
#include <fstream>
#include <algorithm>
#include <cstring>
#define MAX 3505
using namespace std;
struct cutie
{
int x, y, z;
}v[MAX];
int aib[MAX][MAX], D[MAX], n, t, sol;
bool cmp(cutie a, cutie b)
{
return a.x < b.x;
}
int query(int x, int y)
{
int i, j, res = 0;
for(i = x; i; i -= i ^ (i - 1) & i)
for(j = y; j; j -= j ^ (j - 1) & j)
res = max(res, aib[i][j]);
return res;
}
void update(int x, int y, int val)
{
int i, j;
for(i = x; i <= n; i += i ^ (i - 1) & i)
for(j = y; j <= n; j += j ^ (j - 1) & j)
aib[i][j] = max(val, aib[i][j]);
}
int main()
{
ifstream in("cutii.in"); in>>n>>t;
ofstream out("cutii.out");
while(t--)
{
for(int i = 1; i <= n; i++) in>>v[i].x>>v[i].y>>v[i].z;
sol = 0;
sort(v + 1, v + n + 1, cmp);
for(int i = 1; i <= n; i++)
{
D[i] = query(v[i].y - 1, v[i].z - 1) + 1;
update(v[i].y, v[i].z, D[i]);
if(D[i] > sol)
sol = D[i];
}
out<<sol<<"\n";
for(int i = 1; i <= n; i++)
memset(aib[i], 0, MAX * sizeof(int));
}
in.close(); out.close();
return 0;
}