Pagini recente » Cod sursa (job #2914475) | Cod sursa (job #718146) | Cod sursa (job #2111429) | Cod sursa (job #2027491) | Cod sursa (job #1200984)
#include<cstdio>
#define Nmax 250002
#define ll long long
using namespace std;
int n,m,p,x,y,i;
ll nr,a[Nmax],sl[Nmax],sr[Nmax],tl[Nmax],tr[Nmax];
int cbin(int x, int y)
{ int s=x,st=x,dr=y,mi;
while(st<=dr)
{ mi=(st+dr)>>1;
if(sl[mi-1]-sl[x-1]<sr[mi]-sr[y+1]) s=mi, st=mi+1; else dr=mi-1;
}
return s;
}
int main()
{ freopen("cuburi2.in","r",stdin); freopen("cuburi2.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i) {scanf("%d",&a[i]); sl[i]=sl[i-1]+a[i]; tl[i]=tl[i-1]+sl[i];}
for(i=n;i;--i) {sr[i]=sr[i+1]+a[i]; tr[i]=tr[i+1]+sr[i];}
while(m--)
{ scanf("%d%d",&x,&y);
p=cbin(x,y);
nr=tl[p-1]-tl[x-1]-sl[x-1]*(p-x)+tr[p+1]-tr[y+1]-sr[y+1]*(y-p);
printf("%d %lld\n",p,nr);
}
return 0;
}