Cod sursa(job #2926703)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 18 octombrie 2022 14:25:41
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <bits/stdc++.h>
#define LIM 1<<17
/// TONI BO$$ was here
/// #MLC

using namespace std;
char BUF[LIM];
int poz;

inline char getChar(){
    poz++;
    if(poz>=LIM){
    	fread(BUF,LIM,1,stdin);
    	poz=0;
    }
    return BUF[poz];
}

inline int getNr(){
    int r=0, semn=1;
    char ch=getChar();
    while(isdigit(ch)==0 && ch!='-') ch=getChar();
    if(ch=='-'){
        semn=-1;
        ch=getChar();
    }
    while(isdigit(ch)!=0){
        r=r*10+semn*(ch-'0');
        ch=getChar();
    }
    return r;
}

int n, aib2d[3501][3501];

int zeros(int i)
{
    return (i ^ (i - 1)) & i;
}

int query(int i, int j)
{
    int z = 0;
    while(i)
    {
        int k = j;
        while(k)
            z = max(z, aib2d[i][k]), k -= zeros(k);
        i -= zeros(i);
    }
    return z;
}

void update(int i, int j, int z)
{
    while(i <= n)
    {
        int k = j;
        while(k <= n)
            aib2d[i][k] = max(aib2d[i][k], z), k += zeros(k);
        i += zeros(i);
    }
}

void free(int i, int j)
{
    while(i <= n)
    {
        int k = j;
        while(k <= n)
            aib2d[i][k] = 0, k += zeros(k);
        i += zeros(i);
    }
}

struct box
{
    int i, j, k;
    bool operator <(const box &oth) const
    {
        return i < oth.i;
    }
}v[3501];

int main()
{
    int t, i, rez;
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);
    poz = LIM;
    n = getNr();
    t = getNr();
    while(t--)
    {
        for(i = 0; i < n; i++)
            v[i].i = getNr(), v[i].j = getNr(), v[i].k = getNr();
        sort(v, v + n);
        rez = 0;
        for(i = 0; i < n; i++)
        {
            int z = query(v[i].j, v[i].k);
            rez = max(rez, z + 1);
            update(v[i].j, v[i].k, z + 1);
        }
        for(i = 0; i < n; i++)
            free(v[i].j, v[i].k);
        printf("%d\n", rez);
    }

    return 0;
}