Pagini recente » Cod sursa (job #3217156) | Cod sursa (job #859443) | Cod sursa (job #1285522) | Cod sursa (job #3206897) | Cod sursa (job #1200985)
#include<cstdio>
#define Nmax 250002
#define ll long long
using namespace std;
int n,m,p,x,y,i,a[Nmax];
ll nr,sl[Nmax],sr[Nmax],tl[Nmax],tr[Nmax];
inline void cbin(int x, int y, int &s)
{ int st=x,dr=y,mi;
s=x;
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;
}
}
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);
cbin(x,y,p);
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;
}