Cod sursa(job #3359840)

Utilizator Maya_PopaPopa Maya Diana Maya_Popa Data 5 iulie 2026 11:29:13
Problema Cuburi2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <vector>
#define MAX 250003

using namespace std;
ifstream fin ("cuburi2.in");
ofstream fout ("cuburi2.out");
long long v[MAX],n;
vector<long long> s1(MAX, 0);
vector<long long> s2(MAX, 0);
void suma (long long n) {
    long long i;
    for (i=1; i<=n; i++) {
        s1[i]=s1[i-1]+v[i];
        s2[i]=s2[i-1]+v[i]*i;
    }
}
long long suma1(long long st, long long dr) {
    if (st>dr) {
        return 0;
    }
    return s1[dr]-s1[st-1];
}
long long suma2(long long st, long long dr) {
    if (st>dr) {
        return 0;
    }
    return s2[dr]-s2[st-1];
}
long long cb (long long x, long long y) {
    long long k=(suma1(x, y)+1)/2;
    long long st=x, dr=y, poz=x;
    while (st<=dr) {
        long long mij=(dr+st)/2;
        if (suma1(x, mij)>=k) {
            poz=mij;
            dr=mij-1;
        } else {
            st=mij+1;
        }
    }
    return poz;
}
long long solve(long long x, long long y, long long poz) {
    long long st=poz*suma1(x, poz-1)-suma2(x, poz-1);
    long long dr=suma2(poz+1, y)-poz*suma1(poz+1, y);
    return st+dr;
}
int main() {
    long long m,i,x,y,poz,k;
    fin>>n>>m;
    for (i=1; i<=n; i++) {
        fin>>v[i];
    }
    suma(n);
    for (i=0; i<m; i++) {
        fin>>x>>y;
        poz=cb(x, y);
        k=solve(x, y, poz);
        fout<<poz<<" "<<k<<endl;
    }
    return 0;
}