Pagini recente » Cod sursa (job #493837) | Cod sursa (job #328768) | Cod sursa (job #164774) | Cod sursa (job #1996689) | Cod sursa (job #1207449)
#include <fstream>
#include <cstring>
using namespace std;
#define dim 3501
struct P{int x,y,z;};
int AIB[dim][dim],n,val,Last[dim][dim],t;
P a[dim];
inline int max(int a,int b){
return (a>b?a:b);
}
void update(int idx1,int idx2){
for(int i=idx1;i<=n;i+=(i & -i))
for(int j=idx2;j<=n;j+=(j & -j))
if(Last[i][j]==t)
AIB[i][j]=max(AIB[i][j],val);
else AIB[i][j]=val,Last[i][j]=t;
}
int query(int idx1,int idx2){
int Val=0;
for(int i=idx1;i>0;i-=(i & -i))
for(int j=idx2;j>0;j-=(j & -j))
if(Last[i][j]==t) Val=max(AIB[i][j],val);
return Val;
}
int main(){
ifstream f("cutii.in");
ofstream g("cutii.out");
int best=0;
f >> n >> t;
while(t--){
best=0;
for(int i=1;i<=n;i++){
int x,y,z;
f >> x >> y >> z;
a[z].x=x,a[z].y=y,a[z].z=z;
}
for(int i=1;i<=n;i++){
val=query(a[i].x-1,a[i].y-1)+1;
if(val>best) best=val;
update(a[i].x,a[i].y);
}
g << best << "\n";
}
}