Cod sursa(job #3331559)

Utilizator alexiam5656Alexia Mitrache alexiam5656 Data 29 decembrie 2025 11:06:10
Problema Cuburi2 Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
/******************************************************************************

                            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;
}