Cod sursa(job #1461588)

Utilizator bogoismarandaBogoi Smaranda bogoismaranda Data 16 iulie 2015 00:01:19
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 kb
#include <fstream>
# include<algorithm>
using namespace std;
int x[200001];
struct prop
{
    int s,p,l;
};
bool cmp (prop a,prop b)
{
    return b.s<a.s;
}
int main()
{
ifstream fin("buline.in");
ofstream fout("buline.out");
  int n,sc,ic,im,sfm,smax,i,inceput,h,j,a,b,k,cnt;
fin>>n;
for(i=1;i<=n;i++)
{
    fin>>a>>b;
    if(b==0)
    x[i]=-a;
    if(b==1)
        x[i]=a;
}
prop v[200001];
i=1;
while(i<=n)
{
    k=i;
    cnt=0;
sc=smax=x[i];
ic=im=sfm=k;
if(i==n)
{
     for(h=1;h<=k-1;h++)
        {

                 if(sc+x[h]<x[h])
             {

                 sc=x[h];
                 ic=h;
             }
             else sc=sc+x[h];
         if(sc>smax)
         {
             smax=sc;
             im=ic;
             sfm=h;
             inceput=im;
         }
        }
}
else{
for(j=i+1;j<=n;j++)
{
    if(j==n&& i!=2)
    {
         if(sc+x[j]<x[j])
             {

                 sc=x[j];
                 ic=j;
             }
             else sc=sc+x[j];
         if(sc>smax)
         {
             smax=sc;
             im=ic;
             sfm=j;
             inceput=im;
         }
        for(h=1;h<=k-1;h++)
        {

                 if(sc+x[h]<x[h])
             {

                 sc=x[h];
                 ic=h;
             }
             else sc=sc+x[h];
         if(sc>smax)
         {
             smax=sc;
             im=ic;
             sfm=h;
             inceput=im;
         }
        }
    }
    else{
            if(sc+x[j]<x[j])
             {

                 sc=x[j];
                 ic=j;
             }
             else sc=sc+x[j];
         if(sc>smax)
         {
             smax=sc;
             im=ic;
             sfm=j;
             inceput=im;
             cnt++;

         }

        }

}
}
v[i].s=smax;
v[i].p=im;
v[i].l=2*n-sfm-im;
if(im-sfm==1 || im-sfm==-1)
{
    v[i].l=2*n-sfm-im+1;
}
i++;
}
sort(v+1,v+n+1,cmp);
for(i=2;i<=n;i++)
{
    if(v[i].s==v[1].s)
    {
        if(v[i].p<=v[1].p)
        {
            fout<<v[i].s<<" "<<v[i].p<<" "<<v[i].l;
        }
        else
            if(v[i].l<=v[1].l)
                fout<<v[i].s<<" "<<v[i].p<<" "<<v[i].l;
        else

            fout<<v[i].s<<" "<<v[i].p<<" "<<v[i].l;
    }
}
   return 0;
}