Pagini recente » Cod sursa (job #713126) | Cod sursa (job #1108938) | Cod sursa (job #992379) | Cod sursa (job #162586) | Cod sursa (job #1201077)
#include<cstdio>
#include <fstream>
#define Nmax 250002
#define ll long long
using namespace std;
ifstream fin("cuburi2.in");
int n,m,p,x,y,i,step,a[Nmax];
ll nr,ss[Nmax],sd[Nmax],ts[Nmax],td[Nmax];
char parse[1<<20],*now;
inline void verify()
{ if (*now == 0) fin.get(parse,1<<20,'\0'), now = parse;}
inline int get()
{ while(*now<'0'||*now>'9') ++now, verify();
int number = 0;
while (*now >= '0' && *now <= '9')
{ number = number * 10 + (*now - '0');
++now; verify();
}
return number;
}
int main()
{ freopen("cuburi2.out","w",stdout);
now=parse; verify();
n=get(); m=get();
for(i=1;i<=n;++i) {a[i]=get(); ss[i]=ss[i-1]+a[i]; ts[i]=ts[i-1]+ss[i];}
for(i=n;i;--i) {sd[i]=sd[i+1]+a[i]; td[i]=td[i+1]+sd[i];}
while(m--)
{ x=get(); y=get();
for(step=1;step<y-x;step<<=1);
for(p=x;step;step>>=1)
if(p+step<=y&&ss[p+step-1]-ss[x-1]<sd[p+step]-sd[y+1]) p+=step;
nr=ts[p-1]-ts[x-1]-ss[x-1]*(p-x)+td[p+1]-td[y+1]-sd[y+1]*(y-p);
printf("%d %lld\n",p,nr);
}
return 0;
}