Cod sursa(job #2580728)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 13 martie 2020 23:44:50
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<bits/stdc++.h>
using namespace std;
const int N=3505;
int aib[N][N];
void update(int lin,int col,int val){
  for(int i=lin;i<N;i+= i&(-i)){
    for(int j=col;j<N;j+= j&(-j)){
      aib[i][j]=max(val,aib[i][j]);
    }
  }
}
int query(int lin,int col){
  int ans=0;
  for(int i=lin;i>0; i-= i&(-i)){
    for(int j=col;j>0;j-= j&(-j))
      ans=max(ans,aib[i][j]);
  }
  return ans;
}
struct coord{
  int x,y,z;
};
bool cmp(coord a,coord b){
  return a.z<b.z;
}
coord v[N];
FILE*fin,*fout;
void solve(int n){
  memset(aib,0,sizeof(aib));
  for(int i=1;i<=n;i++){
    fscanf(fin,"%d %d %d",&v[i].x,&v[i].y,&v[i].z);
  }
  sort(v+1,v+n+1,cmp);
  for(int i=1;i<=n;i++){
    int best=query(v[i].x,v[i].y);
    update(v[i].x,v[i].y,best+1);
  }
  fprintf(fout,"%d\n",query(n,n));
}
int main()
{

  fin=fopen("cutii.in","r");
  fout=fopen("cutii.out","w");
  int n,nrt;
  fscanf(fin,"%d%d",&n,&nrt);
  while(nrt--)
    solve(n);
  return 0;
}