Pagini recente » Cod sursa (job #147975) | Cod sursa (job #1586141) | Cod sursa (job #584596) | Cod sursa (job #579930) | Cod sursa (job #2047032)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
int t, i, n,rez, k, j;
int aib[3504][3504];
pair<int, pair<int, int > > v[3504];
int quarry(int x, int y)
{
int i, j, r=0;
if(x==0||y==0)
return 0;
for(i=x;i>0;i-=(i&(-i)))
for(j=y;j>0;j-=(j&(-j)))
{
r=max(r, aib[i][j]);
}
return r;
}
void update(int x, int y, int val)
{
int i, j;
for(i=x;i<=n;i+=(i&(-i)))
for(j=y;j<=n;j+=(j&(-j)))
aib[i][j]=max(val, aib[i][j]);
}
int main()
{
fin>>n>>t;
for(;t>0;t--)
{
for(i=1;i<=n;i++)
fin>>v[i].first>>v[i].second.first>>v[i].second.second;
sort(v+1, v+n+1);
for(i=1;i<=n;i++){
rez=quarry(v[i].second.first-1, v[i].second.second-1)+1;
update(v[i].second.first, v[i].second.second, rez);
}
fout<<quarry(n, n)<<"\n";
for(k=1;k<=n;k++)
{
for(i=v[k].second.first;i<=n;i+=(i&-i))
for(j=v[k].second.second;j<=n;j+=(j&-j))
aib[i][j]=0;
}
}
fin.close();
fout.close();
return 0;
}