Pagini recente » Cod sursa (job #2045647) | Cod sursa (job #1576727) | Cod sursa (job #728090) | Cod sursa (job #163760) | Cod sursa (job #256230)
Cod sursa(job #256230)
#include<stdio.h>
struct TETRA{
int u,l,b;
};
TETRA table[100000];
int nt;
inline int esti_al_meu(int a,TETRA intr)
{
if(a>intr.l&&a<intr.u)
return 1;
if(a>intr.u)
return 0;
if(a<intr.l)
return -1;
}
inline int intersect(int l,int u,TETRA &intrv)
{
int aux;
if(l<=intrv.u&&u>=intrv.l)
{
aux=(u+1)-l+intrv.b;
intrv.l=l;
intrv.u=(u>intrv.u)?u:intrv.u;
intrv.b=aux;
}
if(l>=intrv.l&&l<=intrv.u&&u>=intrv.u)
{
aux=((u+1)-l)+intrv.b;
intrv.l=(l>intrv.l)?l:intrv.l;
intrv.u=u;
intrv.b=aux;
}
if((u+u+1-l)>=intrv.l)
{
aux=u-1;
while((aux+u+1-l)>=intrv.l&&aux>=l)
--aux;
++aux;
table[nt].l=aux;
table[nt].u=u;
table[nt++].b=u+1-l+intrv.b;
if(aux>l)
{
table[nt].l=l;
table[nt].u=aux-1;
table[nt++].b=u+1-l;
}
}
}
int main()
{
int entr,aux,i,u,l,n,m,k;
freopen("stergeri.in","r",stdin);
freopen("stergeri.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
while(m)
{
scanf("%d%d",&l,&u);
entr=0;
for(i=0;i<nt;++i)
if(intersect(l,u,table[i]))
{
entr=1;
break;
}
if(!entr)
{
table[nt].l=l;
table[nt].u=u;
table[nt++].b=u+1-l;
}
--m;
}
int last=-1;
entr=0;
for(i=0;i<nt;++i)
{
aux=esti_al_meu(k,table[i]);
if(!aux)
last=i;
if(aux>0)
{printf("%d",k+table[i].b);entr=1;break;}
if(aux<0)
break;
}
if(!entr&&last>-1)
printf("%d",k+table[last].b);
else
printf("%d",k);
return 0;
}