Pagini recente » Rating Andrei Ciupitu (rokkyo13) | Cod sursa (job #2571720)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
#define cin fin
#define cout fout
#define sp " "
#define en "\n"
#define x first
#define y second
const int NMAX = 2e5+10;
int n, x, s, k, start;
int v[NMAX];
int sumPart[NMAX];
pair<int, int> sumMax[NMAX];
int bestS, bestK, bestStart;
void read()
{
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>v[i]>>x;
if(x == 0)
v[i]*=-1;
}
}
void solve()
{
for(int i=1; i<=n; i++)
{
sumPart[i]=sumPart[i-1];
sumPart[i]+=v[i];
sumMax[i]=sumMax[i-1];
if(sumMax[i].x < sumPart[i])
sumMax[i] = {sumPart[i], i};
}
int bestS=-1e7;
for(int i=1; i<=n; i++)
{
s=sumPart[n]-sumPart[i-1];
s+=sumMax[i-1].x;
cout<<s<<en;
if(bestS < s)
{
bestS = s;
bestK = n-i+1 + sumMax[i-1].y;
bestStart = i;
}
}
int s=-1e7;
for(int i=1; i<=n; i++)
{
if(s<0)
{
s=v[i];
start=i;
k=1;
}
else
{
s+=v[i];
k++;
}
if(s>bestS)
{
bestS=s;
bestK=k;
bestStart=start;
}
}
cout<<bestS<<sp<<bestStart<<sp<<bestK;
}
int main()
{
read();
solve();
return 0;
}