Cod sursa(job #362274)

Utilizator bugyBogdan Vlad bugy Data 8 noiembrie 2009 19:11:16
Problema Secventa 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#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;   
}