Pagini recente » Cod sursa (job #2763243) | Cod sursa (job #568386) | Cod sursa (job #495274) | Cod sursa (job #2970862) | Cod sursa (job #1432577)
#include <cstdio>
#include <ctype.h>
#define INF ((1LL<<63)-1)
#define DIM 256000
using namespace std;
FILE *fin = fopen("cuburi2.in" ,"r");
FILE *fout= fopen("cuburi2.out","w");
int N, V[DIM], Q, X, Y; long long A[DIM], B[DIM];
inline int read(){
int x = 0;
char ch = fgetc(fin);
while(!isdigit(ch)){
ch = fgetc(fin);
}
while(isdigit(ch)){
x = 10 * x + (ch - '0');
ch = fgetc(fin);
}
return x;
}
void SetUp(){
N = read(); Q = read();
for(int i = 1; i <= N; i ++){
fscanf(fin, "%d", &V[i]);
A[i] = A[i-1] + V[i];
B[i] = B[i-1] + V[i] * 1LL * i;
}
return;
}
inline long long Dist(long long A[], long long B[], int st, int mid, int dr){
return ((A[mid] - A[st-1]) * 1LL * mid - (B[mid] - B[st-1])) + ((B[dr] - B[mid-1]) - (A[dr] - A[mid-1]) * 1LL * mid);
}
void Query(int X, int Y){
int P = X, pas;
for(pas = 1<<17; pas != 0; pas >>= 1){
if((P + pas <= Y) && ((A[P+pas-1]<<1) < A[Y] + A[X-1]))
P += pas;
}
fprintf(fout, "%d %lld\n", P, Dist(A, B, X, P, Y));
return;
}
int main(){
SetUp();
while(Q){
X = read(); Y = read();
Query(X, Y); Q --;
}
return 0;
}