Cod sursa(job #2323420)

Utilizator cipri321Marin Ciprian cipri321 Data 19 ianuarie 2019 10:40:35
Problema Cutii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
#include <cstring>
#include <algorithm>
#define DIM 3505
#define x first
#define y second.first
#define z second.second
#define lsb(a) ((a)^((a)-1))&(a)
using namespace std;
ifstream fi("cutii.in");
ofstream fo("cutii.out");
int T;
int n;
pair<int,pair<int,int> > p[DIM];
short int AIB[DIM][DIM];
void update(int a,int b,short int val)
{
	for(int i=a;i<=n;i+=lsb(i))
		for(int j=b;j<=n;j+=lsb(j))
			AIB[i][j]=max(AIB[i][j],val);
}
short int query(int a,int b)
{
	short int rez=0;
	for(int i=a;i>0;i-=lsb(i))
		for(int j=b;j>0;j-=lsb(j))
			rez=max(rez,AIB[i][j]);
	return rez;
}
int main()
{
	fi>>n>>T;
	for(int t=1;t<=T;t++)
	{
		memset(AIB,0,sizeof(AIB));
		for(int i=1;i<=n;i++)
			fi>>p[i].x>>p[i].y>>p[i].z;
		sort(p+1,p+n+1);
		for(int i=1;i<=n;i++)
			update(p[i].y,p[i].z,query(p[i].y-1,p[i].z-1)+1);
		fo<<query(n,n)<<"\n";
	}
	fi.close();
	fo.close();
	return 0;
}