Nu aveti permisiuni pentru a descarca fisierul grader_test31.ok
Cod sursa(job #1558964)
Utilizator | Data | 29 decembrie 2015 20:40:06 | |
---|---|---|---|
Problema | Cuburi2 | Scor | 45 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.86 kb |
#include<fstream>
using namespace std;
long long v[250002],n;
long long s1[250002],s2[250002];
long long val(int p,int i,int j)
{
long long st,dr;
st=s1[p-1]-s1[i-1]-(p-i)*v[i-1];
dr=s2[p+1]-s2[j+1]-(j-p)*(v[n]-v[j]);
return st+dr;
}
int main()
{
ifstream f("cuburi2.in");
ofstream g("cuburi2.out");
int m,q,w;
f>>n>>m;
for (int i=1;i<=n;i++)
{f>>v[i];
v[i]+=v[i-1];
s1[i]=v[i]+s1[i-1];}
for (int i=n;i>0;i--)
s2[i]=s2[i+1]+v[n]-v[i-1];
while (m--)
{
int q,w;
f>>q>>w;
int poz=q,d;
int x=v[w]+v[q-1];
for (d=1;d<=w-q+1;d<<=1);
for (;d;d>>=1)
if ((poz+d<=w)&&(2*v[poz+d-1]<x))
poz+=d;
//while (poz>q&&v[poz-2]-v[q-1]>=v[w]-v[poz-2]) poz--;
g<<poz<<" "<<val(poz,q,w)<<'\n';
}
return 0;
}