Pagini recente » Cod sursa (job #761937) | Cod sursa (job #1060919) | Cod sursa (job #190715) | Cod sursa (job #1133567) | Cod sursa (job #2331234)
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
struct bil
{
int color,number;
} v[200005];
int main()
{
int n,i;
fin>>n;
int allsum=0;
for(i=1;i<=n;i++)
{
fin>>v[i].number;
fin>>v[i].color;
if(v[i].color==0)
v[i].number=v[i].number*(-1);
allsum=allsum+v[i].number;
}
//subsecventa de suma maxima 1-n
int st,dr,currenti;
st=dr=currenti=1;
int maxsum,currentsum;
maxsum=currentsum=v[1].number;
for(i=2;i<=n;i++)
{
if(v[i].number+currentsum<v[i].number)
{
currenti=i;
currentsum=v[i].number;
}
else
{
currentsum=currentsum+v[i].number;
}
if(currentsum>maxsum)
{
st=currenti;
maxsum=currentsum;
dr=i;
}
}
// secventa de suma minima 1-n
int left,right,curri;
left=right=curri=1;
int minsum;
minsum=currentsum=v[1].number;
for(i=2;i<=n;i++)
{
if(v[i].number+currentsum>v[i].number)
{
currentsum=v[i].number;
curri=i;
}
else
{
currentsum=currentsum+v[i].number;
}
if(currentsum<minsum)
{
minsum=currentsum;
right=i;
left=curri;
}
}
allsum=allsum-minsum;
int final=max(allsum,maxsum);
if(final==allsum)
{
fout<<allsum<<" "<<right+1<<" ";
int finalsum=right-left+1;
fout<<n-finalsum;
fout<<"\n";
}
if(final==maxsum)
{
fout<<maxsum<<" "<<st<<" "<<dr-st+1;
fout<<"\n";
}
fin.close();
fout.close();
return 0;
}