Pagini recente » Cod sursa (job #3280016) | Cod sursa (job #2632500) | Cod sursa (job #2359474) | Cod sursa (job #2667832) | Cod sursa (job #1466521)
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define pii pair<int, int>
#define mp make_pair
using namespace std;
const string name = "cutii",
in_file = name + ".in",
out_file = name + ".out";
ifstream fin(in_file);
ofstream fout(out_file);
const int MAX = 3501;
struct cutie {
int y, z;
cutie() {}
cutie (int y, int z) {
this->y = y;
this->z = z;
}
} v[MAX];
int aib[MAX][MAX], t, n, dp[MAX], sol;
int lsb(int x){
return x & (-x);
}
int query(int a, int b){
int sol = 0;
for (int i = a; i >= 1; i -= lsb(i))
for (int j = b; j >= 1; j -= lsb(j))
sol = max(aib[i][j], sol);
return sol;
}
void update(int a, int b, int val){
for (int i = a; i <= n; i += lsb(i))
for (int j = b; j <= n; j += lsb(j))
aib[i][j] = max (aib[i][j], val);
}
void reset(int a, int b){
for (int i = a; i <= n; i += lsb(i))
for (int j = b; j <= n; j += lsb(j))
aib[i][j] = 0;
}
int main() {
fin >> n >> t;
for (int x, y, z; t; t--){
sol = 0;
for (int i = 1; i <= n; i++){
fin >> x >> y >> z;
v[x] = cutie(y, z);
}
for (int i = 1; i <= n; i++){
int temp = 1 + query(v[i].y - 1, v[i].z - 1);
sol = max(sol, temp);
update(v[i].y, v[i].z, sol);
}
for (int i = 1; i <= n; i++)
reset(v[i].y, v[i].z);
fout << sol << '\n';
}
return 0;
}