Cod sursa(job #2047014)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 24 octombrie 2017 14:29:30
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <algorithm>

using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int t, i, n,rez, k, j;
int aib[3502][3502];
pair<int, pair<int, int > > v[3502];

int quarry(int x, int y)
{
    int i,  j, r=0;
    for(i=x;i>0;i-=i&(-i))
        for(j=y;j>0;j-=j&(-j))
        {
            r=max(r, aib[i][j]);
        }
    return r;
}

void update(int x, int y, int val)
{
    int i, j;
    for(i=x;i<=n;i+=i&(-i))
        for(j=y;j<=n;j+=j&(-j))
            aib[i][j]=max(val, aib[i][j]);
}

int main()
{
    fin>>n>>t;
    for(;t>0;t--)
    {
        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=quarry(v[i].second.first, v[i].second.second)+1;
            update(v[i].second.first, v[i].second.second, rez);
        }
        fout<<quarry(n, n)<<"\n";
        for(k=1;k<=n;k++)
        {
            for(i=v[k].second.first;i<=n;i+=(i&-i))
                for(j=v[k].second.first;j<=n;j+=(j&-j))
                    aib[i][j]=0;
        }
    }
    fin.close();
    fout.close();
    return 0;
}