Pagini recente » Cod sursa (job #2389762) | Cod sursa (job #989012) | Cod sursa (job #135477) | Cod sursa (job #2897669) | Cod sursa (job #3356793)
#include<fstream>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int NMAX=3501;
int aib[NMAX][NMAX];
//aib[y][z]
//aib[y]=sp pe vector de frecventa al z-urilot tututor numerelor din intervalul(i,y)
int n;
int lsb(int &x){
return x&(-x);
}
struct cutie{
int x,y,z;
cutie(int a,int b,int c):x(a),y(b),z(c){};
cutie():x(0),y(0),z(0){};
};
bool cmp1(cutie a,cutie b){
return a.x<b.x;
}
void updateAib(int &x,int &y,int &val){
for(int i=x;i<=n;i+=lsb(i)){
for(int j=y;j<=n;j+=lsb(j)){
aib[i][j]=max(aib[i][j],val);
}
}
}
int queryAib(int &x,int &y){
int maxi=0;
for(int i=x;i>0;i-=lsb(i)){
for(int j=y;j>0;j-=lsb(j)){
maxi=max(maxi,aib[i][j]);
}
}
return maxi;
}
void reset(int n){
for(int i=0;i<=n;++i){
for(int j=0;j<=n;++j){
aib[i][j]=0;
}
}
}
int main(){
int tests;
fin>>n>>tests;
vector<cutie>v(n);
while (tests)
{
for(int i=0;i<n;++i){
fin>>v[i].x>>v[i].y>>v[i].z;
}
sort(v.begin(),v.end(),cmp1);
int rez=0;
for (int i = 0; i < n;++i) {
int query = queryAib(v[i].y,v[i].z);
query++;//si pt cel curent
rez=max(rez,query);
updateAib(v[i].y,v[i].z,query);
}
fout<<rez<<"\n";
reset(n);
--tests;
}
return 0;
}