Pagini recente » Cod sursa (job #2896056) | Cod sursa (job #2756714)
#include<bits/stdc++.h>
using namespace std;
#define INIT ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
//#define int ll
#define int int16_t
int t, n, x[3501], y[3501], z[3501];
//map<int, int> hy, hz;
pair<int, pii> pr[3501];
ifstream fin("cutii.in"); ofstream fout("cutii.out");
#define cin fin
#define cout fout
int fw[3501][3501];
void update(int a, int b, int c){
for(int i=a; i<=n; i+=(i&(-i))){
for(int j=b; j<=n; j+=(j&(-j)) ){
fw[i][j]=max(fw[i][j], c);
}
}
return;
}
int query(int a, int b){
int res=0;
for(int i=a; i>0; i-=(i&(-i)) ){
for(int j=b; j>0; j-=(j&(-j)) ){
res=max(res, fw[i][j]);
}
}
return res;
}
void update0(int a, int b){
for(int i=a; i<=n; i+=(i&(-i)) ){
for(int j=b; j<=n; j+=(j&(-j) ) ){
fw[i][j]=0;
}
}
}
int32_t main(){
INIT
cin>>n>>t;
while(t--){
multiset<pair<int, int>> my, mz;
for(int i=1; i<=n; i++){
cin>>x[i]>>y[i]>>z[i];
my.insert({y[i], i}), mz.insert({z[i], i});
}
int cnty=0;
for(auto it=my.begin(); it!=my.end(); it++){
cnty++;
y[it->sc ]=cnty;
}
int cntz=0;
for(auto it=mz.begin(); it!=mz.end(); it++){
cntz++;
z[it->sc ]=cntz;
}
for(int i=1; i<=n; i++){
pr[i]={x[i], {y[i], z[i]} };
}
sort(pr+1, pr+1+n);
int fin=0;
for(int i=1; i<=n; i++){
//fenwick part
x[i]=pr[i].ft,
y[i]=pr[i].sc.ft, z[i]=pr[i].sc.sc;
int res=query(y[i]-1, z[i]-1);
fin=max(fin, (int)(res+1) );
update(y[i], z[i], (int)(res+1) );
}
cout<<fin<<"\n";
for(int i=1; i<=n; i++){
update0(y[i], z[i]);
}
}
return 0;
}