Cod sursa(job #396751)

Utilizator MKLOLDragos Ristache MKLOL Data 15 februarie 2010 20:11:51
Problema Patrate2 Scor 0
Compilator cpp Status done
Runda Pregatire OJI 2010 Marime 1.32 kb
#include<algorithm>
using namespace std;
#define Nmax 1010

struct cel{
int x,y;
} v[Nmax],l[2*Nmax];
int cmp(cel a,cel b)
{
    return(a.x<b.x);
}
int H,N,k,L,Lfin,Q,ifin,jfin;
int main()
{
freopen("patrate1.in","r",stdin);
freopen("patrate1.out","w",stdout);
    scanf("%d%d",&N,&H);
    for(int i=1;i<=N;++i)
    {
        scanf("%d%d",&v[i].x,&v[i].y);
        v[i].y+=v[i].x-1;
        l[++k].x=v[i].x;
        l[k].y=1;
        l[++k].x=v[i].y;
        l[k].y=-1;
    }
    sort(l+1,l+k+1,cmp);
/*for(int i=1;i<=k;++i)
    printf("%d ",l[i].x);
printf("\n");
for(int i=1;i<=k;++i)
    printf("%d ",l[i].y);*/
for(int i=1;i<=k;++i)
{
    if(l[i].x==l[i+1].x)
    {
        l[i].y+=l[i+1].y;
        for(int j=i+1;j<=k;++j)
        {
        l[j].x=l[j+1].x;
        l[j].y=l[j+1].y;
        }
        --k;
--i;
    }
}

    for(int i=1;i<=k;++i)
    {

        if(l[i].x-ifin+1>Lfin&&Q>=H)
        {
            Lfin=l[i].x-ifin+1;
            jfin=ifin;
        }
        Q+=l[i].y;

        //  printf("%d %d %d %d\n",l[i].x,l[i].y,Q,ifin);
        if(Q>=H&&l[i].y>=1&&ifin==0)
        ifin=l[i].x;
  //printf("%d %d %d %d\n",l[i].x,l[i].y,Q,ifin);

        if(Q<H)
        ifin=0;
      //  printf("%d %d %d %d\n",l[i].x,l[i].y,Q,ifin);
    }
    printf("%d %d\n",jfin,Lfin);

}