Cod sursa(job #2942173)

Utilizator oskar01oskar the boss oskar01 Data 19 noiembrie 2022 11:54:54
Problema Cutii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("cutii.in");
ofstream cout("cutii.out");

class BIT {
private:
    int n;
    vector<vector<int>> ma;
public:
    void resize(int n) {
        ma.clear();
        this->n=n;
        ma.resize(n+1,vector<int>(n+1,0));
    }
    void update(int x,int y,int val) {
        for(int i=x;i<=n;i+=(i & (~i+1))) {
            for(int j=y;j<=n;j+=(j & (~j+1))) {
                ma[i][j]=max(ma[i][j],val);
            }
        }
    }
    int query(int x,int y) {
        int res=0;
        for(int i=x;i>0;i-=(i & (~i+1))) {
            for(int j=y;j>0;j-=(j & (~j+1))) {
                res=max(res,ma[i][j]);
            }
        }
        return res;
    }
    void reset(int x,int y) {
        for(int i=x;i<=n;i+=(i & (~i+1))) {
            for(int j=y;j<=n;j+=(j & (~j+1))) {
                ma[i][j]=0;
            }
        }
    }
};

struct Info {
    int x;
    int y;
    int z;
    bool operator<(Info a2) const {
        return z<a2.z;
    }
};

int n,t;
vector<Info> v;
vector<int> dp;
BIT bit;

void read(){
    cin>>n>>t;
}

void solve() {
    bit.resize(n);
    v.resize(n+1);
    while(t--) {
        for(int i=1;i<=n;i++) {
            cin>>v[i].x>>v[i].y>>v[i].z;
        }
        sort(v.begin()+1,v.end());
        int var;
        for(int i=1;i<=n;i++) {
            var=bit.query(v[i].x,v[i].y)+1;
            bit.update(v[i].x,v[i].y,var);
        }
        cout<<bit.query(n,n)<<"\n";
        for(int i=1;i<=n;i++) {
            bit.reset(v[i].x,v[i].y);
        }
    }
}

int main() {

    read();
    solve();
    return 0;
}