Pagini recente » Cod sursa (job #179572) | Cod sursa (job #3140220) | Cod sursa (job #1555373) | Cod sursa (job #2734346) | Cod sursa (job #1895303)
#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)>>1;
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;}