Pagini recente » Cod sursa (job #1929445) | Cod sursa (job #1602272) | Cod sursa (job #206464) | Cod sursa (job #1744591) | Cod sursa (job #2047729)
#include <fstream>
#include <algorithm>
#define x first.first
#define y first.second
#define z second
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n,i,j,k,nr,A[3501][3501],T,Y,Z,X;
pair<pair<int, int>, int> v[3501];
int query(int X, int Y)
{
int maxim = 0;
for (int i=X; i; i-=(i&-i))
for (int j=Y; j; j-=(j&-j))
maxim = max(maxim, A[i][j]);
return maxim;
}
void update(int X, int Y)
{
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], nr);
}
int main()
{
fin >> n >> T;
for (;T--;)
{
for (i=1; i<=n; i++)
fin >> v[i].x >> v[i].y >> v[i].z;
sort(v+1, v+n+1);
for (i=1; i<=n; i++)
{
Y = v[i].y;
Z = v[i].z;
nr = query(Y-1, Z-1);
nr++;
update(Y, Z);
}
fout << query(n, n) << "\n";
for (k=1; k<=n; k++)
for (i=v[k].y; i<=n; i+=(i&-i))
for (j=v[k].z; j<=n; j+=(j&-j))
A[i][j] = 0;
}
return 0;
}