Cod sursa(job #2621822)

Utilizator victorzarzuZarzu Victor victorzarzu Data 30 mai 2020 20:32:14
Problema Cutii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
#define zeros(x) ((x ^ (x - 1)) & x)

using namespace std;
ifstream f("cutii.in");
ofstream g("cutii.out");
int n, t, x, y, z;
int aib[3505][3505];

struct cutie
{
  int x, y, z;
};

bool cmp(cutie c1, cutie c2)
{
  return c1.z < c2.z;
}
vector<cutie> cutii;

void add(int x, int y, int val)
{
  for(int i = x;i <= n;i += zeros(i))
    for(int j = y;j <= n;j += zeros(j))
      aib[i][j] = max(val, aib[i][j]);
}

int query(int x, int y)
{
  int sum = 0;
  for(int i = x;i > 0;i -= zeros(i))
    for(int j = y;j > 0;j -= zeros(j))
      sum = max(sum, aib[i][j]);
  return sum;
}

void Solve()
{
  cutii.clear();
  for(int i = 1;i <= n;++i)
    {
      f>>x>>y>>z;
      cutii.push_back({x, y, z});
    }
  memset(aib, 0, sizeof(aib));
  sort(cutii.begin(), cutii.end(), cmp);
  for(auto it : cutii)
    {
      int best = query(it.x, it.y);
      add(it.x, it.y, best + 1);
    }
  g<<query(n, n)<<'\n';
}

void Read()
{
  f>>n>>t;
  for(int i = 1;i <= t;++i)
    Solve();
}

int main()
{
  Read();
  return 0;
}