Pagini recente » Cod sursa (job #843274) | Cod sursa (job #620035) | Cod sursa (job #1961) | Cod sursa (job #855904) | Cod sursa (job #3142595)
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
int n,t, aib[3505][3505],dp[3505];
struct box {
int x, y, z;
}c[3505];
ifstream fin("cutii.in");
ofstream fout("cutii.out");
bool cmp(box a, box b) {
return a.x < b.x;
}
void update(int poz1, int poz2, int val) {
while (poz1 <= n) {
int cpy = poz2;
while (cpy <= n) {
aib[poz1][cpy] = max(aib[poz1][cpy], val);
cpy+=(cpy&(cpy^(cpy-1)));
}
poz1 += (poz1 & (poz1 ^ (poz1 - 1)));
}
}
int query(int poz1, int poz2) {
int rez = 0;
while (poz1 > 0) {
int cpy = poz2;
while (cpy > 0) {
rez = max(rez, aib[poz1][cpy]);
cpy -= (cpy & (cpy ^ (cpy - 1)));
}
poz1 -= (poz1 & (poz1 ^ (poz1 - 1)));
}
return rez;
}
int main() {
fin >> n >> t;
for (int k = 1; k <= t; k++) {
for (int i = 1; i <= n; i++) {
fin >> c[i].x >> c[i].y >> c[i].z;
}
sort(c + 1, c + n + 1, cmp);
for (int i = 1; i <= n; i++) {
dp[i] = 1 + query(c[i].y-1, c[i].z-1);
update(c[i].y, c[i].z, dp[i]);
}
int mx = 0;
for (int i = 1; i <= n; i++)
mx = max(mx, dp[i]);
fout << mx << "\n";
for (int i = 1; i <= n; i++)
for (int j=1;j<=n;j++) aib[i][j] = 0;
}
}