Pagini recente » Istoria paginii runda/warmup | Cod sursa (job #1571960) | Statistici Marcu Alexandru (Al3xand3r97) | Cod sursa (job #590571) | Cod sursa (job #2093041)
#include <bits/stdc++.h>
#define MAXN 3500
#define zeros(x) (x & (-x))
int aib[1 + MAXN][1 + MAXN];
int last[1 + MAXN][1 + MAXN];
int z;
void update(int x, int y, int val){
for(int i = x; i <= MAXN; i += zeros(i))
for(int j = y; j <= MAXN; j+= zeros(j)){
if(last[i][j] != z)
aib[i][j] = 0;
last[i][j] = z;
aib[i][j] = std::max(aib[i][j], val);
}
}
int query(int x, int y){
int ans = 0;
for(int i= x; i > 0; i -= zeros(i))
for(int j = y; j > 0; j -= zeros(j)){
if(last[i][j] != z)
aib[i][j] = 0;
last[i][j] = z;
ans = std::max(ans, aib[i][j]);
}
return ans;
}
struct Point{
int x, y, z;
}v[1 + MAXN];
bool cmp(Point A, Point B){
return A.z < B.z;
}
int main(){
FILE*fi,*fo;
fi=fopen("cutii.in","r");
fo=fopen("cutii.out","w");
int n, t;
fscanf(fi,"%d%d", &n, &t);
for(z = 1; z <= t; z++){
for(int i = 1; i <= n; i++)
fscanf(fi,"%d%d%d", &v[i].x, &v[i].y, &v[i].z);
std::sort(v + 1, v + n + 1, cmp);
for(int i = 1; i <= n; i++){
int val = query(v[i].x, v[i].y);
update(v[i].x, v[i].y, val + 1);
}
fprintf(fo,"%d\n", query(MAXN, MAXN));
}
fclose(fi);
fclose(fo);
return 0;
}