Cod sursa(job #3260397)

Utilizator cinavalptopscalaCont laptop in scoala cinavalptopscala Data 2 decembrie 2024 10:55:55
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include<vector>
#include<tuple>
#include<algorithm>
using namespace std;

ifstream fin ("cutii.in");
ofstream fout ("cutii.out");

vector<tuple<int, int, int>> cutii;

void read();
int solve();
void clean();

int main(){
    int t, n;
    fin >> n >> t;
    cutii.resize(n);
    while(t--){
        read();
        fout << solve() << '\n';
        clean();
    }
    return 0;
}

const size_t Dim = 3501;
int AIB[Dim][Dim];

void Update(int i, int j, int v){
    for(;i<Dim;i+=i&-i)
        for(;j<Dim;j+=j&-j)
            AIB[i][j] = max(AIB[i][j], v);
}
void SetNull(int i, int j) {
    for(;i<Dim;i+=i&-i)
        for(;j<Dim;j+=j&-j)
            AIB[i][j] = 0;
}
int Query(int i, int j) {
    int m = 0;
    for(;i>0;i-=i&-i)
        for(;j>0;j-=j&-j)
            m = max(m, AIB[i][j]);
    return m;
}

void read() {
    for(auto &cutie : cutii)
        fin >> get<1>(cutie) >> get<2>(cutie) >> get<0>(cutie);
}
int solve() {
    sort(cutii.begin(), cutii.end());
    int m = 0;
    for(const auto &cutie : cutii) {
        int q = Query(get<1>(cutie)-1, get<2>(cutie)-1) + 1;
        m = max(m, q);
        Update(get<1>(cutie), get<2>(cutie), q);
    }
    return m;
}
void clean() {
    for(const auto &cutie : cutii)
        SetNull(get<1>(cutie), get<2>(cutie));
}