Cod sursa(job #2643768)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 21 august 2020 15:47:23
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<bits/stdc++.h>

#define NMAX 3503
#define ll long long

using namespace std;

int n, t, AIB[NMAX][NMAX];

struct cutie{
    int a,b,c;
}v[NMAX];

void add(int x, int y2, int val){
    for (x++;x<NMAX;x += (x & (-x)))
    for (int y=y2+1;y<NMAX;y += (y & (-y))){
        AIB[x][y] = val > 0 ? max(AIB[x][y], val) : 0;
    }
}

int query(int x, int y2){
    int ans = 0;
    for (x++;x>0;x -= (x & (-x)))
    for (int y=y2+1;y>0;y -= (y & (-y))){
        ans = max(ans, AIB[x][y]);
    }
    return ans;
}



int main(){
    cin.sync_with_stdio(false);
    freopen("cutii.in","r",stdin);
    freopen("cutii.out","w",stdout);

    cin >> n >> t;
    while (t--){
        for (int i=1;i<=n;i++) cin >> v[i].a >> v[i].b >> v[i].c;
        sort(v+1,v+n+1,[](cutie A, cutie B){return A.a < B.a;});
        int ans = 0;
        for (int i=1;i<=n;i++){
            int val = query(v[i].b - 1, v[i].c - 1) + 1;
            add(v[i].b, v[i].a, val);
            ans = max(ans, val);
        }
        cout << ans << '\n';
        for (int i=1;i<=n;i++){
            add(v[i].b, v[i].c, -1);
        }
    }


    return 0;
}