Cod sursa(job #2046260)

Utilizator Liviu_Ionut_MoantaMoanta Ionut Liviu Liviu_Ionut_Moanta Data 23 octombrie 2017 17:18:35
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n,i,j,t,rez,rezf;
pair<int,pair<int,int> > v[3505];
int aib[3505][3505];
int query(int i,int j){
    int x,y;
    int r=0;
    for(x=i;x;x-=(x&-x)){
        for(y=j;y;y-=(y&-y)){
            r=max(r,aib[x][y]);
        }
    }
    return r;

}
void update(int i,int j,int val){
    for(;i<=n;i+=(i&-i)){
        for(;j<=n;j+=(j&-j)){
            aib[i][j]=max(aib[i][j],val);
        }
    }
}
int main(){
    fin>>n>>t;
    for(int o=1;o<=t;o++){
        rezf=0;
        for(i=1;i<=n;i++){
            fin>>v[i].first>>v[i].second.first>>v[i].second.second;
        }
        sort(v+1,v+n+1);
        for(i=1;i<=n;i++){
            rez=query(v[i].second.first-1,v[i].second.second-1)+1;
            update(v[i].second.first,v[i].second.second,rez);
            rezf=max(rez,rezf);
        }
        fout<<rezf<<"\n";
        for(int k=1;k<=n;k++){
            for(i=v[k].second.first;i<=n;i+=(i&-i)){
                for(j=v[k].second.second;j<=n;j+=(j&-j)){
                    aib[i][j]=0;
                }
            }
        }
    }
    return 0;
}