Pagini recente » Cod sursa (job #803947) | Cod sursa (job #1232557) | Cod sursa (job #3235057) | Cod sursa (job #2550877) | Cod sursa (job #2942173)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("cutii.in");
ofstream cout("cutii.out");
class BIT {
private:
int n;
vector<vector<int>> ma;
public:
void resize(int n) {
ma.clear();
this->n=n;
ma.resize(n+1,vector<int>(n+1,0));
}
void update(int x,int y,int val) {
for(int i=x;i<=n;i+=(i & (~i+1))) {
for(int j=y;j<=n;j+=(j & (~j+1))) {
ma[i][j]=max(ma[i][j],val);
}
}
}
int query(int x,int y) {
int res=0;
for(int i=x;i>0;i-=(i & (~i+1))) {
for(int j=y;j>0;j-=(j & (~j+1))) {
res=max(res,ma[i][j]);
}
}
return res;
}
void reset(int x,int y) {
for(int i=x;i<=n;i+=(i & (~i+1))) {
for(int j=y;j<=n;j+=(j & (~j+1))) {
ma[i][j]=0;
}
}
}
};
struct Info {
int x;
int y;
int z;
bool operator<(Info a2) const {
return z<a2.z;
}
};
int n,t;
vector<Info> v;
vector<int> dp;
BIT bit;
void read(){
cin>>n>>t;
}
void solve() {
bit.resize(n);
v.resize(n+1);
while(t--) {
for(int i=1;i<=n;i++) {
cin>>v[i].x>>v[i].y>>v[i].z;
}
sort(v.begin()+1,v.end());
int var;
for(int i=1;i<=n;i++) {
var=bit.query(v[i].x,v[i].y)+1;
bit.update(v[i].x,v[i].y,var);
}
cout<<bit.query(n,n)<<"\n";
for(int i=1;i<=n;i++) {
bit.reset(v[i].x,v[i].y);
}
}
}
int main() {
read();
solve();
return 0;
}