Pagini recente » Cod sursa (job #1825632) | Cod sursa (job #1263717) | Cod sursa (job #849689) | Cod sursa (job #1687478) | Cod sursa (job #2046716)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
struct str{
int x,y,z;
}c[3501];
short aib[3501][3501];
short n,t;
bool cmp (str s1, str s2) {
return s1.z < s2.z;
}
void update_aib (int pozitie_i, int pozitie_j, short valoare) {
for (int i = pozitie_i; i <= n; i += (i&(-i))) {
for (int j = pozitie_j; j <= n; j += (j&(-j))) {
aib[i][j] = max (aib[i][j], valoare);
}
}
return;
}
void reset_aib (int pozitie_i, int pozitie_j, short valoare) {
for (int i = pozitie_i; i <= n; i += (i&(-i))) {
for (int j = pozitie_j; j <= n; j += (j&(-j))) {
aib[i][j] = valoare;
}
}
return;
}
int query_aib (int pozitie_i, int pozitie_j) {
short maxim = 0;
for (int i = pozitie_i; i >= 1; i -= (i&(-i))) {
for (int j = pozitie_j; j >= 1; j -= (j&(-j))) {
maxim = max (maxim, aib[i][j]);
}
}
return maxim;
}
int main(void) {
in >>n >>t;
for (int g = 1; g <= t; g ++) {
for (int i = 1; i <= n; i ++) {
in >> c[i].x >> c[i].y >> c[i].z;
}
sort (c + 1, c + n + 1, cmp);
for (int i = 1; i <= n; i ++) {
int x = query_aib(c[i].x-1,c[i].y-1);
update_aib( c[i].x, c[i].y, x + 1);
}
out << query_aib(n,n)<<"\n";
for (int i = 1; i <= n; i ++) {
reset_aib(c[i].x,c[i].y,0);
}
}
return 0;
}