Pagini recente » Cod sursa (job #563668) | Cod sursa (job #2662969) | Cod sursa (job #2627979) | Cod sursa (job #2103722) | Cod sursa (job #2809840)
#include <fstream>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
pair<int, int> v[3505];
int aib[3505][3505], n;
int query(int ii, int jj) {
int ans = 0;
for(int i = ii; i > 0; i -= (i & -i)) {
for(int j = jj; j > 0; j -= (j & -j)) {
ans = max(ans, aib[i][j]);
}
}
return ans;
}
void update(int ii, int jj, int val) {
for(int i = ii; i <= n; i += (i & -i)) {
for(int j = jj; j <= n; j += (j & -j)) {
aib[i][j] = max(aib[i][j], val);
}
}
}
void clear(int ii, int jj) {
for(int i = ii; i <= n; i += (i & -i)) {
for(int j = jj; j <= n; j += (j & -j)) {
aib[i][j] = 0;
}
}
}
int main() {
int t;
fin >> n >> t;
while(t > 0) {
for(int i = 1; i <= n; i++) {
int x, y, z;
fin >> x >> y >> z;
v[z] = {x, y};
}
for(int i = 1; i <= n; i++) {
int val = query(v[i].first, v[i].second);
update(v[i].first, v[i].second, val + 1);
}
fout << query(n, n) << "\n";
for(int i = 1; i <= n; i++) {
clear(v[i].first, v[i].second);
}
t--;
}
return 0;
}