Pagini recente » Cod sursa (job #935451) | Cod sursa (job #884114) | Cod sursa (job #2090008) | Cod sursa (job #2278140) | Cod sursa (job #2672259)
#include<bits/stdc++.h>
#define ub(x) x & (-x)
#define NMAX 3505
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n, t, aib[NMAX][NMAX];
vector < pair <int, int> > v;
void update(int x, int y, int val)
{ for (int i = x; i <= n; i += ub(i))
for (int j = y; j <= n; j += ub(j))
aib[i][j] = max(val, aib[i][j]);
}
int query(int x, int y)
{ int val = 0;
for (int i = x; i; i -= ub(i))
for (int j = y; j; j -= ub(j))
val = max(val, aib[i][j]);
return val;
}
void clear(int x, int y)
{ for (int i = x; i <= n; i += ub(i))
for (int j = y; j <= n; j += ub(j))
aib[i][j] = 0;
}
int main()
{ fin >> n >> t;
v.resize(n+1);
while (t--)
{ int maxi = 0, x, y, z;
for (int i = 1; i <= n; ++i)
{ fin >> x >> y >> z;
v[z] = make_pair(x, y);
}
for (int i = 1; i <= n; ++i)
{ int cnt = query(v[i].first - 1, v[i].second - 1) + 1;
maxi = max(maxi, cnt);
update(v[i].first, v[i].second, cnt);
}
fout << maxi << "\n";
for (int i = 1; i <= n; ++i)
clear(v[i].first, v[i].second);
}
fout.close();
return 0;
}