Cod sursa(job #2323550)

Utilizator PredaBossPreda Andrei PredaBoss Data 19 ianuarie 2019 12:34:31
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
vector<pair<int,pair<int,int> > >elem;
pair<short,short> val[3505][3505];
int t,n,counter,ans;
void add(int x,int y,short sum)
{
    for(int i=x;i<=n;i+=(i^(i-1))&i)
        for(int j=y;j<=n;j+=(j^(j-1))&j)
        if(val[i][j].second==t)
            val[i][j].first=max(val[i][j].first,sum);
        else
            val[i][j]={sum,t};
}
short get_ans(int x,int y)
{
    short rez=0;
    for(int i=x;i>0;i-=(i^(i-1))&i)
        for(int j=y;j>0;j-=(j^(j-1))&j)
            if(val[i][j].second==t)
                rez=max(rez,val[i][j].first);
    return rez;
}
int main()
{
    fin>>n>>t;
    while(t--)
    {
        elem.clear();
        int x,y,z;
        for(int i=1;i<=n;i++)
        {
            fin>>x>>y>>z;
            elem.push_back({x,{y,z}});
        }
        sort(elem.begin(),elem.end());
        for(int i=0;i<n;i++)
        {
            short vl=get_ans(elem[i].second.first-1,elem[i].second.second-1)+1;
            add(elem[i].second.first,elem[i].second.second,vl);
        }
        fout<<get_ans(n,n)<<"\n";
    }
    return 0;
}