Nu aveti permisiuni pentru a descarca fisierul grader_test9.in
Cod sursa(job #2549039)
Utilizator | Data | 17 februarie 2020 11:21:55 | |
---|---|---|---|
Problema | Cutii | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 1.73 kb |
#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;x-=lsb(x))
for(int y1=y;y1;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,j,val;i<n;++i){
while(i<n && v[i] == v[i+1])
++i;
while(i<n && v[i].ft == v[i+1].ft)
++i;
j=i;
while(j>=0 && v[j].ft == v[i].ft){
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);
--j;
}
}
for(int i=0;i<n;++i)
bit.del(v[i].sd.ft, v[i].sd.sd);
fout<<sol<<'\n';
}
return 0;
}