Pagini recente » Borderou de evaluare (job #103460) | Clasamentul arhivei de probleme | Cod sursa (job #3236905) | Clasamentul arhivei de probleme | Cod sursa (job #2132411)
#include <fstream>
#include <climits>
using namespace std;
ifstream f("buline.in");
ofstream g("buline.out");
int x,an,n,mini=INT_MAX,maxim=INT_MIN,i,start,idx,sf,s,r,k;
short int v[400001],t[400001];
int main()
{
f>>n;
for (i=1;i<=n;i++)
{
f>>x>>an;
if (an==0)
{
v[i]=-x;
t[i]=-x;
}
else
{
v[i]=x;
t[i]=x;
}
}
for (i=1;i<=n;i++)
{
v[i]=v[i]+v[i-1];
if (maxim<v[i]-mini)
{
maxim=v[i]-mini;
start=idx+1;
sf=i;
}
if (mini>v[i])
{
idx=i;
mini=v[i];
}
}
s=maxim;
k=sf;
idx=sf;
while (idx<=n+start-1)
{
idx++;
if (idx%n==0)
{
r=n;
}
else
{
r=idx%n;
}
s+=t[r];
if (s>maxim)
{
maxim=s;
k=idx;
}
}
g<<maxim<<" "<<start<<" "<<k-start+1;
return 0;
}