Pagini recente » Cod sursa (job #1332344) | Cod sursa (job #2110548) | Cod sursa (job #222341) | Cod sursa (job #346988) | Cod sursa (job #2942171)
#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 reset() {
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
ma[i][j]=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;
}
};
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 resetV() {
for(int i=1;i<=n;i++) {
v[i]={0,0,0};
dp[i]=0;
}
}
void solve() {
bit.resize(n);
v.resize(n+1);
dp.resize(n+1);
while(t--) {
resetV();
bit.reset();
for(int i=1;i<=n;i++) {
cin>>v[i].x>>v[i].y>>v[i].z;
}
sort(v.begin()+1,v.end());
for(int i=1;i<=n;i++) {
dp[i]=bit.query(v[i].x,v[i].y)+1;
bit.update(v[i].x,v[i].y,dp[i]);
}
int res=0;
for(int i=1;i<=n;i++) {
res=max(res,dp[i]);
}
cout<<res<<"\n";
}
}
int main() {
read();
solve();
return 0;
}