Pagini recente » Cod sursa (job #615533) | Cod sursa (job #3291004) | Cod sursa (job #1722176) | Cod sursa (job #121117) | Cod sursa (job #1720542)
/// Salutari lui Ghigheci din partea lui Harry Potter
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 3505;
struct PII {
int x, y;
PII() { }
PII(int _x, int _y) {
x = _x;
y = _y;
}
};
int n;
int aib[NMAX][NMAX];
PII box[NMAX];
inline int lsb(int arg) {
return arg&-arg;
}
void setnul(int x, int y) {
for(int i=x; i<=n; i+=lsb(i))
for(int j=y; j<=n; j+=lsb(j))
aib[i][j] = 0;
}
int query(int x, int y) {
int ans = 0;
for(int i=x; i; i-=lsb(i))
for(int j=y; j; j-=lsb(j))
if(aib[i][j]>ans)
ans = aib[i][j];
return ans;
}
void update(int x, int y, int val) {
for(int i=x; i<NMAX; i+=lsb(i))
for(int j=y; j<NMAX; j+=lsb(j))
if(aib[i][j]<val)
aib[i][j] = val;
}
int main(void) {
freopen("cutii.in", "r", stdin);
freopen("cutii.out", "w", stdout);
int t, g, ans, x, y, z;
scanf("%d%d",&n,&t);
while(t--) {
ans = 1;
for(int i=1; i<=n; ++i) {
scanf("%d%d%d",&x,&y,&z);
box[x] = PII(y, z);
}
for(int i=1; i<=n; ++i) {
g = query(box[i].x-1, box[i].y-1) + 1;
ans = max(ans, g);
update(box[i].x, box[i].y, g);
}
for(int i=1; i<=n; ++i)
setnul(box[i].x, box[i].y);
printf("%d\n",ans);
}
fclose(stdin);
fclose(stdout);
return 0;
}