Pagini recente » Cod sursa (job #3262831) | Cod sursa (job #1478519) | Cod sursa (job #2677393) | Cod sursa (job #2666463) | Cod sursa (job #775148)
Cod sursa(job #775148)
#include<stdio.h>
#include<deque>
using namespace std;
#define MAXN 200002
#define INFINITE 999999999
deque < int > A;
int v[ 2 * MAXN ];
long long int s[ 2 * MAXN ], maxs = - (2 * INFINITE);
int n, i, x, beg, length, t;
int main()
{
FILE *f = fopen("buline.in", "r");
fscanf(f, "%d", &n);
for(i = 1; i <= n; ++i)
{
fscanf(f, "%d %d", &v[i], &x);
if(!x)
v[i] = -v[i];
v[i + n] = v[i];
}
t = 2 * n;
for(i = 1; i <= t; ++i)
{
s[i] = v[i] + s[i-1];
while(!A.empty() && s[i] <= s[ A.front() ])
A.pop_front();
A.push_front(i);
if(i - A.back() + 1 > n)
A.pop_back();
if(s[i] - s[ A.back() ] > maxs)
maxs = s[i] - s[ A.back() ], beg = A.back() + 1, length = i - A.back();
}
FILE *g = fopen("buline.out", "w");
fprintf(g, "%lld %d %d\n", maxs, beg, length);
fclose(g);
return 0;
}