Pagini recente » Cod sursa (job #1440015) | Cod sursa (job #2640760) | Cod sursa (job #1438860) | Cod sursa (job #2352847) | Cod sursa (job #2438036)
#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];
int 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))
{
if(i == a && j == b)
AIT[i][j] = val;
else
AIT[i][j] = max(AIT[i][j], val);
}
}
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--)
{
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 - 1, V[i].y - 1);
Update(V[i].x, V[i].y, val + 1);
}
fout << Querry(N, N) << '\n';
for(int i = 1; i <= N; i++)
Update(V[i].x, V[i].y, 0);
}
fin.close();
fout.close();
return 0;
}