Cod sursa(job #2046482)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 23 octombrie 2017 20:36:19
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
# include <fstream>
# include <algorithm>
# define DIM 3510
# define x first.second
# define y second
# define z first.first
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
pair<pair<int,int>,int> v[DIM];
int d[DIM][DIM],n,t,q,i,sol;
int query(int i,int j){
    int s=0;
    for(int xx=i;xx>=1;xx-=(xx&(-xx)))
        for(int yy=j;yy>=1;yy-=(yy&(-yy)))
            s=max(d[xx][yy],s);
    return s;
}
void update(int i,int j,int val){
    for(int xx=i;xx<=n;xx+=(xx&(-xx)))
        for(int yy=j;yy<=n;yy+=(yy&(-yy)))
            d[xx][yy]=max(d[xx][yy],val);
}
int main () {
    fin>>n>>t;
    for(q=1;q<=t;q++){
        for(i=1;i<=n;i++)
            fin>>v[i].x>>v[i].y>>v[i].z;
        sort(v+1,v+n+1);
        sol=0;
        for(i=1;i<=n;i++){
            int val=query(v[i].x-1,v[i].y-1)+1;
            sol=max(sol,val);
            update(v[i].x,v[i].y,val);
        }
        for(i=1;i<=n;i++){
            for(int xx=v[i].x;xx<=n;xx+=(xx&(-xx)))
                for(int yy=v[i].y;yy<=n;yy+=(yy&(-yy)))
                    d[xx][yy]=0;
        }
        fout<<sol<<"\n";
    }
    return 0;
}