Pagini recente » Cod sursa (job #626532) | Monitorul de evaluare | Cod sursa (job #2054593) | Cod sursa (job #129451) | Cod sursa (job #2509085)
#include <bits/stdc++.h>
#define DIM 3510
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int n,i,A[DIM][DIM],t,val,sol;
struct cutie{
int x,y,z;
};
cutie v[DIM];
bool cmp(const cutie &a, const cutie &b) {
return a.z<b.z;
}
void update (int pozi,int pozj,int x) {
for (int i=pozi;i<=n;i+=(i&-i))
for (int j=pozj;j<=n;j+=(j&-j)) {
if (x==0)
A[i][j]=0;
else
A[i][j]=max(A[i][j],x);
}
}
int query(int pozi,int pozj) {
int rez=0;
for (int i=pozi;i;i-=(i&-i))
for (int j=pozj;j;j-=(j&-j))
rez=max(rez,A[i][j]);
return rez;
}
int main() {
fin>>n>>t;
while (t--) {
sol=0;
for (i=1;i<=n;i++)
fin>>v[i].x>>v[i].y>>v[i].z;
sort(v+1,v+n+1,cmp);
for (i=1;i<=n;i++) {
val=1+query(v[i].x-1,v[i].y-1); //query-ul returneaza cate cutii cu dimensiuni mai mici am avut inainte
update(v[i].x,v[i].y,val);
sol=max(sol,val);
}
fout<<sol<<"\n";
for (i=1;i<=n;i++)
update(v[i].x,v[i].y,0);
}
return 0;
}