Pagini recente » Cod sursa (job #2098528) | Cod sursa (job #359779) | Cod sursa (job #947712) | Cod sursa (job #1750308) | Cod sursa (job #3261284)
#include<fstream>
#include<vector>
#include<tuple>
#include<algorithm>
using namespace std;
ifstream fin ("cutii.in");
ofstream fout ("cutii.out");
vector<tuple<int, int, int>> cutii;
void read();
int solve();
void clean();
int main(){
int t, n;
fin >> n >> t;
cutii.resize(n);
while(t--){
read();
fout << solve() << '\n';
clean();
}
return 0;
}
const int Dim = 3502;
int AIB[Dim][Dim];
void Update(int i, int j, int v){
++i; ++j;
for(;i<Dim;i+=i&-i)
for(;j<Dim;j+=j&-j)
AIB[i][j] = max(AIB[i][j], v);
}
void SetNull(int i, int j) {
++i; ++j;
for(;i<Dim;i+=i&-i)
for(;j<Dim;j+=j&-j)
AIB[i][j] = 0;
}
int Query(int i, int j) {
++i; ++j;
int m = 0;
for(;i>0;i-=i&-i)
for(;j>0;j-=j&-j)
m = max(m, AIB[i][j]);
return m;
}
void read() {
for(auto &cutie : cutii)
fin >> get<0>(cutie) >> get<1>(cutie) >> get<2>(cutie);
}
int solve() {
sort(cutii.begin(), cutii.end());
int m = 0;
for(const auto &cutie : cutii) {
int q = Query(get<1>(cutie)-1, get<2>(cutie)-1) + 1;
m = max(m, q);
Update(get<1>(cutie), get<2>(cutie), q);
}
return m;
}
void clean() {
for(const auto &cutie : cutii)
SetNull(get<1>(cutie), get<2>(cutie));
}