Pagini recente » Cod sursa (job #2566005) | Cod sursa (job #1683319) | Cod sursa (job #1650517) | Cod sursa (job #2437638) | Cod sursa (job #2438037)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int NMax = 3500;
int N, T, AIT[NMax + 5][NMax + 5];
struct str{int x, y;} V[NMax + 5];
void Update(int a, int b, int val)
{
for(int i = a; i <= N; i += i & (-i))
for(int j = b; j <= N; j += j & (-j))
AIT[i][j] = max(AIT[i][j], val);
}
void Delete(int a, int b)
{
for(int i = a; i <= N; i += i & (-i))
for(int j = b; j <= N; j += j & (-j))
AIT[i][j] = 0;
}
int Querry(int a, int b)
{
int Sol = 0;
for(int i = a; i > 0; i -= i & (-i))
for(int j = b; j > 0; j -= j & (-j))
Sol = max(Sol, AIT[i][j]);
return Sol;
}
int main()
{
fin >> N >> T;
while(T--)
{
int Ans = 0;
for(int i = 1, a; i <= N; i++)
{
fin >> a;
fin >> V[a].x >> V[a].y;
}
for(int i = 1; i <= N; i++)
{
int val = Querry(V[i].x, V[i].y) + 1;
Update(V[i].x, V[i].y, val);
Ans = max(Ans, val);
}
fout << Ans << '\n';
for(int i = 1; i <= N; i++)
Delete(V[i].x, V[i].y);
}
fin.close();
fout.close();
return 0;
}