Pagini recente » Cod sursa (job #3263232) | Cod sursa (job #2042964) | Cod sursa (job #2034389) | Cod sursa (job #268976) | Cod sursa (job #2549064)
#include <bits/stdc++.h>
#define NMAX (int)(3504)
#define pb emplace_back
#define ft first
#define sd second
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
typedef pair <int, int> pairINT;
typedef long long ll;
class FenwickTree2D{
public:
int n;
void upd(int x, int y,int val){
for(;x<=n;x+=lsb(x))
for(int y1=y;y1<=n;y1+=lsb(y1))
fen[x][y1]=max(fen[x][y1], val);
}
int qry(int x, int y){
int sol=0;
for(;x;x-=lsb(x))
for(int y1=y;y1;y1-=lsb(y1))
sol=max(sol, fen[x][y1]);
return sol;
}
void del(int x, int y){
for(;x<=n;x+=lsb(x))
for(int y1=y;y1<=n;y1+=lsb(y1))
fen[x][y1]=0;
}
private:
int fen[NMAX][NMAX];//y, z
int lsb(int &x){ return x&(-x); }
};
int n,t;
pair <int, pairINT> v[NMAX];
FenwickTree2D bit;
int main(){
fin>>n>>t;
bit.n=n;
for(int sol=0;t;--t,sol=0){
for(int i=0;i<n;++i)
fin>>v[i].ft>>v[i].sd.ft>>v[i].sd.sd;
sort(v, v+n);
for(int i=0,val;i<n;++i){
val=bit.qry(v[i].sd.ft-1, v[i].sd.sd-1) + 1;
sol=max(sol, val);
bit.upd(v[i].sd.ft, v[i].sd.sd, val);
}
for(int i=0;i<n;++i)
bit.del(v[i].sd.ft, v[i].sd.sd);
fout<<sol<<'\n';
}
return 0;
}