Pagini recente » Cod sursa (job #1043268) | Cod sursa (job #2677238) | Cod sursa (job #1725040) | Cod sursa (job #1169839) | Cod sursa (job #1337334)
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<deque>
#define Nmax 400005
#define Inf 2000000000
using namespace std;
deque < int >e;
int n,i,j,sol,p,q,nr,v[Nmax*2],s[2*Nmax];
int main()
{
freopen("buline.in","r",stdin);
freopen("buline.out","w",stdout);
scanf("%d",&n); sol=-Inf;
for (i=1;i<=n;i++)
{
scanf("%d %d",&v[i],&p);
if (p==0) v[i]=-v[i];
}
p=0;
for (i=1;i<n;i++) v[i+n]=v[i];
for (i=2*n-1;i>=1;i--)
{
s[i]=s[i+1]+v[i];
while ((!e.empty())&&(s[e.back()]>s[i]))
e.pop_back();
e.push_back(i);
}
for (i=2*n-1;i>=1;i--)
{
while (!e.empty() && e.front()-i>n)
e.pop_front();
if (e.empty()) e.push_back(2*n);
while (!e.empty() && e.front()-i>n)
e.pop_front();
if (e.empty()) continue;
if (s[e.front()]>0)
{
if (s[i]>=sol)
sol=s[i],p=i,q=2*n-i;
continue;
}
if (s[i]-s[e.front()]>=sol)
sol=s[i]-s[e.front()],p=i,q=e.front()-i;
}
printf("%d %d %d",sol,p,q);
return 0;
}