Pagini recente » Cod sursa (job #1255204) | Cod sursa (job #1105229) | Cod sursa (job #2080178) | Cod sursa (job #2350844) | Cod sursa (job #1201079)
#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;
ll nr,a[Nmax],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;
}