Pagini recente » Cod sursa (job #2615617) | Cod sursa (job #499673) | Cod sursa (job #1626459) | Cod sursa (job #1427974) | Cod sursa (job #1135109)
#include <cstdio>
using namespace std;
int v[200001];
int main()
{
int n, st, dr, stmin, dr0, s, s0, smax = 0, p, l, l0, l_smax, asn;
freopen("buline.in", "r", stdin);
freopen("buline.out", "w", stdout);
scanf("%d", &n);
for(p = 1; p <= n; ++p)
{
scanf("%d%d", &v[p], &asn);
if(asn == 0)
v[p] = -v[p];
}
for(p = 1; p <= n; ++p)
{
label0:
if(v[p] > 0)
st = p;
else
{
++p;
goto label0;
}
//trebuie ca secventa de '+'uri dintre doua '-'uri sa fie mai mare ca ultimele nre scazute
s = 0;
l = 0;
dr = st;
do
{
s += v[dr];
++l;
++dr;
if(dr == n+1)
dr = 1;
}while(dr != st && v[dr] > 0);
label:
s0 = 0;
l0 = 0;
if(v[dr] < 0)
{
dr0 = dr;
do
{
s0 += v[dr0];
++l0;
++dr0;
}while(v[dr0] > 0 && dr0 < st);
}
if(s0 > 0)
{
dr = dr0;
s += s0;
l += l0;
goto label;
}
else
{
if(s > smax)
{
l_smax = l;
smax = s;
stmin = st;
}
}
}
printf("%d %d %d\n", smax, stmin, l_smax);
return 0;
}