Cod sursa(job #2136277)

Utilizator ovidius11Stiriu Ovidius ovidius11 Data 19 februarie 2018 20:06:04
Problema Cutii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
struct chestie{
map<int,int>m;
bool findc(int x,int y){
map<int,int>::iterator it=m.lower_bound(x);
if (it==m.begin())
return 0;
it--;
if (it->second<y)
return 1;
else
return 0;}
bool insertc(int x,int y){
map<int,int>::iterator it=m.lower_bound(x),i2;
i2=it;
while(i2!=m.end() && i2->second>=y)
i2++;
m.erase(it,i2);
m.insert(pair<int,int>(x,y));}
};
struct nod{
int z,x,y;
}v[3505];
chestie a[3505];
int cmp(nod a,nod b){
return a.z<b.z;}
int main(){
freopen("cutii.in","r",stdin);
freopen("cutii.out","w",stdout);
int n,t,i,l,i1,st,dr,mij;
scanf("%d%d",&n,&t);
for(i1=1;i1<=t;i1++){
for(i=1;i<=3500;i++)
a[i].m.clear();
for(i=1;i<=n;i++)
scanf("%d%d%d",&v[i].z,&v[i].x,&v[i].y);
sort(v+1,v+n+1,cmp);
a[1].insertc(v[1].x,v[1].y);
l=1;
for(i=2;i<=n;i++){
st=0;
dr=l;
while(st<dr){
mij=(st+dr+1)/2;
if (a[mij].findc(v[i].x,v[i].y))
st=mij;
else
dr=mij-1;}
if (l<=st)
l=st+1;
a[st+1].insertc(v[i].x,v[i].y);}
printf("%d\n",l);}
return 0;}