Pagini recente » Cod sursa (job #1390262) | Cod sursa (job #1909789) | Cod sursa (job #2147385) | Cod sursa (job #1477175) | Cod sursa (job #2323856)
#include<iostream>
#include<fstream>
#include<unordered_map>
#include<set>
#include<algorithm>
#include<ctime>
#define x first
#define y second
using namespace std;
ifstream fin("cutii.in");
ofstream fout("cutii.out");
const int DN=3505;
int n,t,st,dr,mij,ma,f,g,l;
pair<int,pair<int,int> >a[DN];
set<pair<int,int> >s[DN];
int vf(int lung)
{
if(lung==0)
return 1;
if(s[lung].empty())
return 0;
set<pair<int,int> >::iterator it;
it=s[lung].lower_bound({f,5000});
if(it==s[lung].begin())
return 0;
it--;
if(it->y<g)
return 1;
return 0;
}
void add(int lung)
{
set<pair<int,int> >::iterator it;
it=s[lung].lower_bound({f,5000});
if(it!=s[lung].begin())
{
it--;
if(it->y<g)
return;
it++;
}
int vf=1;
while(vf)
{
vf=0;
it=s[lung].lower_bound({f,5000});
if(it==s[lung].end())
break;
if(g<it->y)
{
vf=1;
s[lung].erase(it);
}
}
s[lung].insert({f,g});
}
int main()
{
fin>>n>>t;
while(t--)
{
for(int i=1;i<=n;i++)
s[i].clear();
for(int i=1;i<=n;i++)
fin>>a[i].x>>a[i].y.x>>a[i].y.y;
sort(a+1,a+n+1);
ma=0;
for(int i=1;i<=n;i++)
{
f=a[i].y.x;
g=a[i].y.y;
st=0;
dr=ma;
while(st<dr)
{
mij=(st+dr+1)/2;
if(vf(mij))
st=mij;
else
dr=mij-1;
}
l=st+1;
ma=max(ma,l);
//cout<<l<<'\n';
add(l);
}
fout<<ma<<'\n';
}
}