Pagini recente » Cod sursa (job #3141088) | Borderou de evaluare (job #1519097) | Borderou de evaluare (job #2013418) | Cod sursa (job #2908535) | Cod sursa (job #455227)
Cod sursa(job #455227)
#include<fstream>
#include<vector>
#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];
int s[NMax];
vector< int > T(NMax,-INF);
int ind[NMax];
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;
s[i] = s[i-1] + v[i];
if( T[i-1]<s[i] ) T[i]=s[i], ind[i]=i;
else T[i]=T[i-1], ind[i]=ind[i-1];
}
}
void solve()
{
int p,l;
int smax=-INF;
for(int i=1; i<=N; i++)
{
if( smax < s[N]-s[i-1] + T[i-1] ) smax = s[N]-s[i-1] + T[i-1] , p = i, l= N-i+1+ind[i-1];
/*if( smax == s[N]-s[i-1] + T[i-1] )
if(*/
}
g<< smax <<" "<< p <<" "<< l ;
}
int main()
{
read(); solve();
f.close(); g.close();
return 0;
}