Pagini recente » Cod sursa (job #1880296) | Cod sursa (job #87302) | Cod sursa (job #1741325) | Cod sursa (job #726614) | Cod sursa (job #963983)
Cod sursa(job #963983)
#include<stdio.h>
#define maxdim 250005
#define file_size 1000000
FILE*f=fopen("cuburi2.in","r");
FILE*g=fopen("cuburi2.out","w");
int n,q,ch;
int A[maxdim];
long long bring_left[maxdim],sum_left[maxdim],bring_right[maxdim],sum_right[maxdim];
char buff[file_size+5];
inline long long compute ( int a , int b , int c ){
return bring_left[b] - bring_left[a] - sum_left[a-1]*(b-a) + bring_right[b] - bring_right[c] - sum_right[c+1]*(c-b);
}
inline void solve ( const int &x , const int &y ){
int loc = 0;
int left = x,middle,right = y;
while ( left <= right ){
middle = (left+right)>>1;
if ( middle == y ){
loc = y;
break ;
}
if ( compute(x,middle,y) <= compute(x,middle+1,y) ){
right = middle-1;
loc = middle;
}
else{
left = middle+1;
}
}
fprintf(g,"%d %lld\n",loc,compute(x,loc,y));
}
inline int next () {
int r = 0;
while ( buff[ch] >= '0' && buff[ch] <= '9' ){
r = r * 10 + buff[ch]-'0';
++ch;
if ( ch == file_size ){
fread(buff,file_size,1,f);
ch = 0;
}
}
++ch;
if ( ch == file_size ){
fread(buff,file_size,1,f);
ch = 0;
}
return r;
}
int main () {
fread(buff,file_size,1,f);
n = next(); q = next();
//fscanf(f,"%d %d",&n,&q);
for ( int i = 1 ; i <= n ; ++i ){
//fscanf(f,"%d",&A[i]);
A[i] = next();
}
for ( int i = 1 ; i <= n ; ++i ){
bring_left[i] = bring_left[i-1] + sum_left[i-1];
sum_left[i] = sum_left[i-1] + A[i];
}
for ( int i = n ; i >= 1 ; --i ){
bring_right[i] = bring_right[i+1] + sum_right[i+1];
sum_right[i] = sum_right[i+1] + A[i];
}
int x,y;
for ( int i = 1 ; i <= q ; ++i ){
//fscanf(f,"%d %d",&x,&y);
x = next(); y = next();
solve(x,y);
}
fclose(f);
fclose(g);
return 0;
}