Pagini recente » Cod sursa (job #2660602) | Cod sursa (job #3331465) | Cod sursa (job #1221077) | Diferente pentru problema/stv intre reviziile 32 si 31 | Cod sursa (job #3346105)
#include <fstream>
#include <climits>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
int v[200001],x[200001],z[200001],st,dr,i,j,n,stCurent,c,minim;
long long s, maxim;
int main()
{
fin>>n;
j=0;
for(i=1;i<=n;i++){
fin>>v[i]>>c;
if(c==1)
x[i]=v[i];
else
x[i]=-v[i];
z[++j] += v[i];
}
s = x[1];
stCurent = 1;
maxim = s;
st = 1;
dr = 1;
for (i=2;i<=n;i++) {
if (s + x[i] >= x[i])
s = s + x[i];
else {
s = x[i];
stCurent = i;
}
if (s > maxim) {
maxim = s;
dr = i;
st = stCurent;
}
}
int st1=st;
int dr1=dr;
s = x[1];
stCurent = 1;
minim = s;
st = 1;
dr = 1;
for (i=2;i<=n;i++) {
if (s + x[i] <= x[i])
s = s + x[i];
else {
s = x[i];
stCurent = i;
}
if (s < minim) {
minim = s;
dr = i;
st = stCurent;
}
}
int ver = z[n]-z[dr]+z[st-1];
if(ver>maxim)
fout<<maxim<<" "<<st1<<" "<<dr1;
else
fout<<ver<<" "<<st<<" "<<dr;
return 0;
}