Pagini recente » Cod sursa (job #3331033) | Cod sursa (job #2030361) | Cod sursa (job #1835315) | Cod sursa (job #2150039) | Cod sursa (job #3331559)
/******************************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#define NMAX 250000
int find_max(int x, int y, int *v)
{
int max=v[x];
int poz_max=x;
for(int i =x+1;i<=y;i++)
{
if(v[i]>max)
{
poz_max=i;
max=v[i];
}
}
return poz_max;
}
int main(void)
{
FILE *fin=fopen("cuburi2.in", "r");
FILE *fout=fopen("cuburi2.out", "w");
int n,m,x,y;
fscanf(fin, "%d %d", &n, &m);
int *v= (int *)malloc((n+1)*sizeof(int));
long long s1=0,s2=0;
long long *sp=(long long*)calloc(n+1, sizeof(long long));
long long *ssp = (long long *)calloc(n + 1, sizeof(long long));
for(int i =1;i<=n;i++)
{
fscanf(fin, "%d", &v[i]);
sp[i]=sp[i-1]+v[i];
ssp[i] = ssp[i - 1] + sp[i];
}
for(int i =1;i<=m;i++)
{
s1=0,s2=0;
fscanf(fin, "%d %d", &x, &y);
int poz_max=find_max(x,y,v);
fprintf(fout, "%d ", poz_max);
if(x<poz_max)
{
s1 = ssp[poz_max - 1] - ssp[x - 1];
}
if(poz_max<y)
{
s2 = (ssp[y] - ssp[poz_max]) - (long long)(y - poz_max) * sp[poz_max];
}
fprintf(fout, "%lld\n", s1+s2);
}
fclose(fin);
fclose(fout);
free(sp),free(v),free(ssp);
return 0;
}