Pagini recente » Cod sursa (job #2138588) | Cod sursa (job #2326612) | Istoria paginii runda/s/clasament | Cod sursa (job #1843502) | Cod sursa (job #800446)
Cod sursa(job #800446)
#include <iostream>
#include <deque>
#include <fstream>
#include <algorithm>
using namespace std;
int v[400005],Suma;
deque<int> dp;
int main()
{
int n,x,p,maxim=-1<<30,start,dupa;
ifstream f("buline.in");
ofstream g("buline.out");
f>>n;
for(int i=1;i<=n;i++)
{
f>>x>>p;
if(p==0)
{
v[i]=-x;
v[n+i]=-x;
}
else
{
v[i]=x;
v[n+i]=x;
}
}
for(int i=1;i<2*n;i++)
{
if(dp.size()==n)
{
Suma-=dp.front();
dp.pop_front();
}
if(Suma+v[i]>v[i])
{
dp.push_back(v[i]);
Suma+=v[i];
}
else
{
Suma=v[i];
while(dp.size())
dp.pop_front();
dp.push_back(v[i]);
}
if(Suma>maxim)
{
maxim=Suma;
dupa=dp.size();
start=( (i-dp.size()+1)>n )? ( (i-dp.size()+1)-n ) : (i-dp.size()+1);
}
}
g<<maxim<<" "<<start<<" "<<dupa;
return 0;
}