Pagini recente » Cod sursa (job #2958217) | Cod sursa (job #2346130) | Cod sursa (job #1434755) | Cod sursa (job #15162) | Cod sursa (job #2874566)
#include <bits/stdc++.h>
#define LIM 1<<17
#define NMAX 250000
/// TONI BO$$ was here
/// #MLC
using namespace std;
char BUF[LIM];
int poz;
inline char getChar(){
poz++;
if(poz>=LIM){
fread(BUF,LIM,1,stdin);
poz=0;
}
return BUF[poz];
}
inline int getNr(){
int r=0, semn=1;
char ch=getChar();
while(isdigit(ch)==0 && ch!='-') ch=getChar();
if(ch=='-'){
semn=-1;
ch=getChar();
}
while(isdigit(ch)!=0){
r=r*10+semn*(ch-'0');
ch=getChar();
}
return r;
}
int v[NMAX + 2];
long long s_left[NMAX + 2], ss_left[NMAX + 2], ss_right[NMAX + 2], s_right[NMAX + 2];
long long verif(int i, int j, int k)
{
return ss_left[k - 1] - ss_left[i - 1] - 1LL * (k - i) * s_left[i - 1] + ss_right[k + 1] - ss_right[j + 1] - 1LL * (j - k) * s_right[j + 1];
}
int main()
{
int n, m, i, a, b, k, pas;
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
n = getNr();
m = getNr();
for(i = 1; i <= n; i++)
v[i] = getNr();
for(i = 1; i <= n; i++)
{
s_left[i] = s_left[i - 1] + v[i];
ss_left[i] = ss_left[i - 1] + s_left[i];
s_right[n - i + 1] = s_right[n - i + 2] + v[n - i + 1];
ss_right[n - i + 1] = ss_right[n - i + 2] + s_right[n - i + 1];
}
for(i = 1; i <= m; i++)
{
a = getNr();
b = getNr();
k = a;
pas = 1 << 17;
while(pas)
{
if(k + pas <= b && verif(a, b, k + pas) <= verif(a, b, k + pas - 1))
k += pas;
pas /= 2;
}
printf("%d %lld\n", k, verif(a, b, k));
}
return 0;
}