Pagini recente » Cod sursa (job #2899620) | Cod sursa (job #1502483) | Cod sursa (job #142142) | Cod sursa (job #451754) | Cod sursa (job #1253526)
#include <fstream>
#include <vector>
#include <algorithm>
#define x second.first
#define y second.second
using namespace std;
ifstream is("cutii.in");
ofstream os("cutii.out");
int n, t, a1, a2, a3, answ, sum;
int aib[3501][3501];
vector<pair<int, pair<int, int>>> c;
void UPDATE(int px, int py, int val);
void CLEAR(int px, int py);
int SUM(int px, int py);
int main()
{
is >> n >> t;
while ( t-- )
{
for ( int i = 1; i <= n; ++i )
{
is >> a1 >> a2 >> a3;
c.push_back(make_pair(a1, make_pair(a2, a3)));
}
answ = 0;
sort(c.begin(), c.end());
for ( auto i : c )
{
sum = SUM(i.x - 1, i.y - 1) + 1;
UPDATE(i.x, i.y, sum);
answ = max(answ, sum);
}
/*for ( int i = 1; i <= n; ++i )
{
for ( int j = 1; j <= n; ++j )
os << aib[i][j] << " ";
os << "\n";
}*/
for ( auto i : c )
if ( aib[i.x][i.y] )
CLEAR(i.x, i.y);
os << answ << "\n";
c.clear();
}
is.close();
os.close();
}
void UPDATE(int px, int py, int val)
{
for ( int i = px; i <= n; i += i & -i )
for ( int j = py; j <= n; j += j & -j )
aib[i][j] = max(aib[i][j], val);
}
void CLEAR(int px, int py)
{
for ( int i = px; i <= n; i += i & -i )
for ( int j = py; j <= n; j += j & -j )
aib[i][j] = 0;
}
int SUM(int px, int py)
{
int s = 0;
for ( int i = px; i; i -= i & -i )
for ( int j = py; j; j -= j & -j )
s = max(s, aib[i][j]);
return s;
}