Cod sursa(job #2013502)

Utilizator Y0da1NUME JMECHER Y0da1 Data 21 august 2017 16:31:50
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int T, n; //exceptional
struct cutie{
int x;
int y;
int z;
};
bool criteriu (const cutie a, const cutie b)
{
    if(a.x==b.x)
    {
        if(a.y==b.y)
            return a.z < b.z;
        return a.y < b.y;
    }
    else return a.x < b.x;
}
int aib[3502][3502];
int query(int x, int y)
{
    int maxim = 0;
    for(int i=x;i>0;i-=i&-i)
        for(int j=y;j>0;j-=j&-j)
            if(aib[i][j]>maxim)
                maxim=aib[i][j];
    return maxim;
}
void update(int x, int y, int val)
{
    for(int i=x;i<=n;i+=i&-i)
        for(int j=y;j<=n;j+=j&-j)
            if(val>aib[x][y])
                aib[x][y]=val;
}
vector <cutie> cutii (3505);
int main()
{
    ifstream in ("cutii.in");
    ofstream out ("cutii.out");
    int ans=0, val;
    in>>n>>T;
    cutie temp, nul;
    nul.x=0;
    nul.y=0;
    nul.z=0;
    cutii[n]=nul;
    for(;T>0;--T)
    {
        for(int i=0;i<n;++i)
        {
            in>>temp.x>>temp.y>>temp.z;
            cutii[i]=temp;
        }
        sort(cutii.begin(), cutii.begin()+n, criteriu);
        //for(int i=0;i<n;++i)
        //    cout<<"("<<cutii[i].x<<","<<cutii[i].y<<","<<cutii[i].z<<") ";
        //cout<<endl;
        for(int i=0;i<n;++i)
        {
            val=query(cutii[i].y-1, cutii[i].z-1);
            ++val;
            //cout<<val<<" ";
            if(val>ans)
                ans=val;
            if(cutii[i].x!=cutii[i+1].x)
                for(int j=i;cutii[j].x==cutii[i].x;--j)
                {
                    update(cutii[j].y, cutii[j].z, ans);
                   // cout<<"updating.. ("<<ans<<") ";
                }
        }
        //clear aib
        for(int i=0;i<=n;++i)
            for(int j=0;j<=n;++j)
                aib[i][j]=0;
        out<<ans<<"\n";
        ans=0;
    }
    return 0;
}