Pagini recente » Cod sursa (job #3338781) | Cod sursa (job #3321320) | Cod sursa (job #3316814) | Cod sursa (job #3302915) | Cod sursa (job #3347630)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("buline.in");
ofstream fout("buline.out");
const int NMAX = 200000;
struct BILE
{
int bile, culoare;
};
BILE v[NMAX + 5];
bool f[NMAX + 5];
int main()
{
int bilete, sum, sumax, bil, i, ince, p, l, u;
fin >> bilete;
sum = sumax = 0;
bool cul;
for(i = 1; i <= bilete; i ++)
{
fin >> bil >> cul;
v[i].bile = bil;
v[i].culoare = cul;
}
i = 1;
while(v[i].culoare == 0)
i ++;
p = i;
l = 0;
for(; i <= bilete; i ++)
{
if(v[i].culoare == 1)
{
sum += v[i].bile;
f[i] = 1;
l ++;
}
else
{
sum -= v[i].bile;
f[i] = 1;
l ++;
if(sum < 0)
{
sum = 0;
memset(f, 0, sizeof(f));
p = i + 1;
l = 0;
}
}
if(sum > sumax)
sumax = sum;
}
u = sumax;
for(i = 1; i <= bilete; i ++)
{
if(f[i] == 1)
break;
if(v[i].culoare == 1)
sum += v[i].bile;
else
{
sum -= v[i].bile;
if(sum < 0)
break;
}
if(sum > sumax)
sumax = sum;
}
for(i = 1; i <= bilete; i ++)
{
if(v[i].culoare == 1)
u += v[i].bile;
else
u -= v[i].bile;
l ++;
if(u == sumax)
break;
}
fout << sumax << " " << p << " " << l << "\n";
return 0;
}