Pagini recente » Cod sursa (job #1681879) | Cod sursa (job #2571353) | Cod sursa (job #3157658) | Cod sursa (job #2040856) | Cod sursa (job #362274)
Cod sursa(job #362274)
#include<stdio.h>
using namespace std;
#define dim 50001
int ss=0,sss=0;
int com(int v,int b)
{
if(v>=b) {ss++;return v;}
else {sss++;return b;}
}
int w[dim];
int main()
{ int i,l,poz,in,x,n,k,y;
long long max,s;
FILE*f=fopen("secv2.in","r"), *g=fopen("secv2.out","w");
fscanf(f,"%d %d%d",&n,&k,&x);
w[1]=x;
max=s=x;in=l=1;poz=0;
for(i=2;i<=n;i++)
{fscanf(f,"%d",&x); w[i]=x;
if(s<0){s=x;in=i;}
else s+=x;
if(max<=s){max=s;poz=in;l=i-in+1;}
}
ss=1;sss=1;
if((poz+l-1-poz)<k)
while((poz+l-1-poz)<k)
{ y=com(w[poz-ss],w[poz+l-1+sss]);
if(y!=0)
max+=y;
else {
if(y==w[poz-ss])
ss--;
else if(
y==poz+l-1+sss) sss--;
else
{if(poz-ss<1) {max+=w[poz+l-1+sss];sss--;ss++;}
else if(poz+l-1+sss>n) {max+=w[poz-ss];ss++;sss--;}
}
}
k--;
}
fprintf(g,"%d %d %lld\n",poz-ss+1,poz+l-1+sss-1,max);
fclose(f);
fclose(g);
return 0;
}