Pagini recente » Cod sursa (job #195497) | Cod sursa (job #371722) | Cod sursa (job #2779245) | Cod sursa (job #2473486) | Cod sursa (job #455211)
Cod sursa(job #455211)
#include<fstream>
#define inf "buline.in"
#define outf "buline.out"
#define NMax 400100
#define INF 0x3f3f3f3f
using namespace std;
fstream f(inf,ios::in),g(outf,ios::out);
int N;
int v[NMax],v2[NMax];
long long sum;
void read()
{
int a,b;
f>>N;
for(int i=1; i<=N; i++)
{
f>>a>>b;
if( !b ) v[i]=-a;
else v[i]=a;
v2[i]=-v[i];
sum += (long long)(v[i]);
}
}
long long scmax(int a[],int &pm,int &lm)
{
int p,l;
long long smax=-INF,s=-INF;
for(int i=1; i<=N; i++)
{
if( s<0 )
{
s = a[i];
p = i;
l = 1;
}
else s += (long long)(a[i]), l++;
if( s>smax ) smax=s, pm=p, lm=l;
else if( s==smax )
{
if( p+l<pm+lm ) pm=p , lm=l;
else if( p+l==pm+lm && N-l<N-lm ) pm=p,lm=l;
}
}
return smax;
}
void solve()
{
int p,l;
int s;
s = scmax(v2,p,l);
//g<<s<<"\n";
g<< sum+s <<" "<< p+l <<" "<< N-l ;
}
int main()
{
read(); solve();
f.close(); g.close();
return 0;
}