Pagini recente » Cod sursa (job #1303552) | Cod sursa (job #1830235) | Cod sursa (job #1127314) | Cod sursa (job #1936503) | Cod sursa (job #2631175)
#include <bits/stdc++.h>
using namespace std;
ifstream r("cutii.in");
ofstream w("cutii.out");
int aib[3502][3502];
int n, t;
class str
{
public:
int a, b, c;
str()
{
a = 0;
b = 0;
c = 0;
}
bool operator < (const str &other) const &
{
return a < other.a;
}
};
vector<str>boxes;
void update(int a, int b, int val)
{
for (; a<=3502; a+=a&(-a))
{
for (int i = b; i <= 3502; i += i & (-i))
{
aib[a][i] = max(aib[a][i], val);
}
}
}
inline int querry(int a, int b)
{
int ans = 0;
for (; a; a -= a & (-a))
{
for (int c = b; c; c -= c & (-c))
ans = max(ans, aib[a][c]);
}
return ans;
}
void init()
{
for (auto it: boxes)
{
for (int i = it.b; i <= 3502; i += i & (-i))
{
for (int j = it.c; j <= 3502; j += j & (-j))
aib[i][j] = 0;
}
}
}
void solve()
{
init();
boxes.clear();
}
int rez()
{
int ans = 0;
for (auto it: boxes)
{
int a = querry(it.b - 1, it.c - 1) + 1;
update(it.b, it.c, a);
ans = max(ans, a);
}
return ans;
}
int main()
{
r>>n>>t;
while(t--)
{
for (int i = 1; i <= n; ++i)
{
int a, b, c;
r >> a >> b >> c;
str aux;
aux.a=a;
aux.b=b;
aux.c=c;
boxes.push_back(aux);
}
sort(boxes.begin(), boxes.end());
w<<rez()<<"\n";
solve();
}
return 0;
}