Pagini recente » Cod sursa (job #579508) | Cod sursa (job #699064) | Cod sursa (job #174850) | Cod sursa (job #657540) | Cod sursa (job #2331229)
#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<<" "<<left<<" "<<right-left+1;
fout<<"\n";
}
fin.close();
fout.close();
return 0;
}