Pagini recente » Monitorul de evaluare | Cod sursa (job #248545) | Cod sursa (job #2133175) | Cod sursa (job #2437953) | Cod sursa (job #2392046)
#include <fstream>
#include <climits>
using namespace std;
ifstream fin ("buline.in");
ofstream fout ("buline.out");
int v[200004];
int main()
{
int i,j,x,spar=0,smax=INT_MIN,pozpar=1,li,lf1,a,sum=0,lg,n,z=0,smin=INT_MIN,sumf,li1=1,lg1=1,lf;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>x>>a;
if(a==0)
v[++z]=-x;
else
if(a==1)
v[++z]=x;
}
for(i=1;i<=n;i++)
sum+=v[i];
for(i=1;i<=n;i++)
{
if(spar<0)
{
spar=v[i];
pozpar=i;
}
else
spar+=v[i];
if(spar>smax)
{
smax=spar;
li1=pozpar;
lf1=i;
}
}
lg1=lf1-li1+1;
for(i=1;i<=z;i++)
{
v[i]=-v[i];
}
spar=0;
pozpar=1;
for(i=1;i<=z;i++)
{
if(spar<0)
{
spar=v[i];
pozpar=i;
}
else
spar+=v[i];
if(spar>smin)
{
smin=spar;
li=pozpar;
lf=i;
}
}
lg=lf-li+1;
sumf=max(smax,sum+smin);
if(sumf==smax)
fout<<sumf<<" "<<li1<<" "<<lg1;
else
if(sumf==sum+smin)
fout<<sumf<<" "<<lf+1<<" "<<n-lg;
return 0;
}