Cod sursa(job #1895296)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 27 februarie 2017 21:22:45
Problema Cuburi2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
using namespace std;
ifstream f ("cuburi2.in");
ofstream g ("cuburi2.out");
long long stm[250002],stM[250002],drm[250002],drM[250002],st,dr;
int v[250002],n,m,x,y,poz;
void caut(int a,int b) //cautare binara
{
    int m;
    while(a<=b)
    {
        m=(a+b)/2;
        if(stm[m-1]-stm[x-1]<stm[y]-stm[m-1]) //daca avem mai putin in stanga cantitativ
        {
            a=m+1;
            poz=m;
        }
        else b=m-1;
    }
}
int main()
{
    int i;
    f>>n>>m;
    for(i=1;i<=n;++i)
    {
        f>>v[i];
        stm[i]=stm[i-1]+v[i];
        stM[i]=stM[i-1]+stm[i-1]; //toate sec pt mutari pana la i de la st la dr
    }
    for(i=n;i>=1;--i)
    {
        drm[i]=drm[i+1]+v[i];
        drM[i]=drM[i+1]+drm[i+1]; //toate sec pt mutari pana la i de la dr la st
    }
    for(i=1;i<=m;++i)
    {
        f>>x>>y;
        poz=x;
        caut(x,y);
        st=stM[poz]-stM[x-1]-stm[x-1]*(poz-x+1);
        dr=drM[poz]-drM[y+1]-drm[y+1]*(y-poz+1);
        g<<poz<<' '<<st+dr<<'\n';
    }
return 0;}