Pagini recente » Cod sursa (job #2210686) | Cod sursa (job #1045378) | Cod sursa (job #2374826) | Cod sursa (job #654128) | Cod sursa (job #2791434)
#include <stdio.h>
#include <vector>
using namespace std;
const int NMAX = 3500;
struct coord
{
int x, y;
};
int aib[NMAX + 1][NMAX + 1];
void update(int l, int c, int val, int n);
int query(int l, int c);
void reinit();
int ptr;
coord misc[700000];
vector<coord> lists[NMAX + 1];
int maxx[NMAX];
int main()
{
int n, t, i, j, x, y, z, maxlen, vlen;
FILE *fin = fopen("cutii.in", "r");
FILE *fout = fopen("cutii.out", "w");
fscanf(fin, "%d%d", &n, &t);
for (int k = 0; k < t; k++)
{
maxlen = 0;
for (j = 0; j < n; j++)
{
fscanf(fin, "%d%d%d", &x, &y, &z);
lists[z].push_back({x, y});
}
reinit();
for (z = 1; z <= n; z++)
{
vlen = lists[z].size();
for (i = 0; i < vlen; i++)
{
maxx[i] = query(lists[z][i].y, lists[z][i].x);
if (maxx[i] > maxlen)
maxlen = maxx[i];
}
for (i = 0; i < vlen; i++)
update(lists[z][i].y, lists[z][i].x, maxx[i] + 1, n);
lists[z].clear();
}
fprintf(fout, "%d\n", maxlen + 1);
}
fclose(fin);
fclose(fout);
return 0;
}
void update(int l, int c, int val, int n)
{
int cpc = c, cpl = l;
for (l = cpl; l <= n; l += (l & -l))
for (c = cpc; c <= n; c += (c & -c))
{
misc[ptr++] = {c, l};
aib[l][c] = max(aib[l][c], val);
}
}
int query(int l, int c)
{
int maxx = 0;
int cpl = l, cpc = c;
for (l = cpl; l > 0; l -= (l & -l))
for (c = cpc; c > 0; c -= (c & -c))
maxx = max(maxx, aib[l][c]);
return maxx;
}
void reinit()
{
for (int i = 0; i < ptr; i++)
aib[misc[i].y][misc[i].x] = 0;
ptr = 0;
}