Cod sursa(job #1050728)

Utilizator sebax538sebastian ghetu sebax538 Data 9 decembrie 2013 00:56:50
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
 
using namespace std;
 
ifstream f("buline.in");
ofstream g("buline.out");
int v[200001],n;

int main()
{
    f>>n;
    for (int i=1;i<=n;i++) {
		int p;
        f>>v[i]>>p;
        v[i + n] = v[i];
        if (p==0)
         v[i] = v[i+n] = -v[i];
    }
 
   int MaxEndingHere = v[1];
        int MaxSum = v[1];
        int begin_temp = 0, end = 0, MaxStart = 0;

        for (int i = 2; i <= n; i++) {
            if (MaxEndingHere > 0) {
                MaxEndingHere += v[i];
            } else {
                MaxStart = i;
                MaxEndingHere = v[i];
            }
            if (MaxEndingHere > MaxSum) {
                MaxSum = MaxEndingHere;
                end = i;
            }
        }
        
        //seocnd pass
        for (int i = 1; i < MaxStart; i++) {
            if (MaxEndingHere > 0) {
                MaxEndingHere += v[i];
            } else {
                break;
            }
            if (MaxEndingHere > MaxSum) {
                MaxSum = MaxEndingHere;
                end = i;
            }
        }
        
      g << MaxSum << " " << MaxStart << " " << (n - MaxStart + end + 1);
   f.close();
   g.close();
}