Pagini recente » Cod sursa (job #54508) | Cod sursa (job #1192405) | Cod sursa (job #3142588) | Cod sursa (job #1970445) | Cod sursa (job #2131122)
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
int v[200000];
int main()
{
int n,nr,sumaint=0,sumaoptima=INT_MIN,i,li,lf,a,b,pozint,sumin=INT_MIN,sumatotala=0,li1,lf1;
ifstream in("buline.in");
ofstream out("buline.out");
in>>n;
for(i=1;i<=n;i++)
{
in>>a>>b;
if(b==0)
v[i]=a*-1;
else
v[i]=a;
sumatotala=sumatotala+v[i];
}
for(i=1;i<=n;i++)
{
if(sumaint<0)
sumaint=v[i],pozint=i;
else
sumaint=sumaint+v[i];
if(sumaint>sumaoptima)
sumaoptima=sumaint,li=pozint,lf=i;
}
for(i=1;i<=n;i++)
{
v[i]=v[i]*-1;
}
sumaint=0;pozint=1;
for(i=1;i<=n;i++)
{
if(sumaint<0)
{
sumaint=v[i];pozint=i;
}
else
{
sumaint=sumaint+v[i];
}
if(sumin<sumaint)
{
sumin=sumaint,li1=pozint,lf1=i;
}
}
sumin=sumin*-1;
sumatotala-=sumin;
if(sumatotala>sumaoptima)
{
sumaoptima=sumatotala;
li=lf1+1;
lf=li1-1;
}
if(li<lf)
{
lf=lf-li+1;
}
else
{
lf=n-li+lf+1;
}
out<<sumaoptima<<" "<<li<<" "<<lf;
/*for(i=1;i<=n;i++)
out<<v[i]<<" ";*/
in.close();
out.close();
return 0;
}