Cod sursa(job #254668)

Utilizator katakunaCazacu Alexandru katakuna Data 7 februarie 2009 13:39:58
Problema Cuburi2 Scor 20
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 1.1 kb
//20 ptc
#include<stdio.h>
#define INF 1<<30
#include<string.h>
#include<algorithm>
using namespace std;

int q,l,s[251111],S,xx,y,x,p,n,m,i,j,t,sol,v[251111];

int suma(int x,int y){
int rez;

   rez=s[y] - s[x-1];
   

return rez;
}

int calc(int a,int b){
   int aux,rez = 0,mut = a;
   if(b > a){
      aux = a;
      a = b;
      b = aux;
   }

   rez = (a - b) *  v[mut];

return rez;
}

int main(){

   FILE *f=fopen("cuburi2.in","r");
   FILE *g=fopen("cuburi2.out","w");

   fscanf(f,"%d %d",&n,&m);

   for(i=1; i<=n; i++){
      fscanf(f,"%d",&v[i]);
      s[i]=s[i-1] + v[i];
      S+=v[i];
   }

   for(i=1;i<=m;i++){
   fscanf(f,"%d %d",&x,&y);
   sol = INF;
   q=0;
      //daca punem in x;
      for(j=x;j<=y;j++){
      q+=calc(j,x);
      }

      if(q < sol){
      sol=q;
      p=x;
      }

      for(l=x+1;l<=y;l++){
      q+=suma(x,l-1);
      q-=suma(l,y);

         if(q < sol){
         sol=q;
         p=l;
         }
         
      }

   fprintf(g,"%d %d\n",p,sol);
   }

   fclose(f);
   fclose(g);
   return 0;
}