Mai intai trebuie sa te autentifici.
Cod sursa(job #3192106)
| Utilizator | Data | 11 ianuarie 2024 16:16:54 | |
|---|---|---|---|
| Problema | Cutii | Scor | 100 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.37 kb |
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("cutii.in");
ofstream out("cutii.out");
const int tmax = 3501;
int aib[tmax][tmax],n;
struct cutie
{
int a,b,c;
};
cutie v[tmax];
bool comp(cutie x, cutie y)
{
return x.a < y.a;
}
int interog(int a,int b)
{
int maxi = -1;
for(int i = a; i > 0; i -= (i &(-i)))
for(int j = b; j > 0; j -= (j & (-j)))
maxi = max(aib[i][j],maxi);
return maxi;
}
void actualiz(int a,int b, int val)
{
for(int i = a; i <= n; i += (i & (-i)))
for(int j = b; j <= n; j += (j & (-j)))
{
aib[i][j] = max(aib[i][j],val);
}
}
void stergere(int a,int b)
{
for(int i = a; i <= n; i += (i & (-i)))
for(int j = b; j <= n; j += (j & (-j)))
{
aib[i][j] = 0;
}
}
int main()
{
int t;
in>>n>>t;
for(int i = 1; i <= t; i++)
{
int maxi = 0;
for(int j = 1; j <= n; j++)
in>>v[j].a>>v[j].b>>v[j].c;
sort(v + 1, v + n + 1, comp);
for(int j = 1; j <= n; j ++)
{
int nr = interog(v[j].b, v[j].c) + 1;
actualiz(v[j].b, v[j].c, nr);
maxi = max(maxi, nr);
}
out<<maxi<<'\n';
for(int j = 1; j <= n; j++)
stergere(v[j].b, v[j].c);
}
return 0;
}
