Pagini recente » Cod sursa (job #710281) | Cod sursa (job #398273) | Cod sursa (job #754035) | Cod sursa (job #2458434) | Cod sursa (job #1565565)
#include <fstream>
using namespace std;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
typedef long long i64;
const int nmax= 250000;
i64 a[nmax+1], b[nmax+1], c[nmax+1];
string buffer;
string::iterator buffer_it;
void read_int_nn( int &x ) {
for ( ; *buffer_it>'9' || *buffer_it<'0'; ++buffer_it ) ;
for ( x= 0; *buffer_it<='9' && *buffer_it>='0'; ++buffer_it ) {
x= x*10+*buffer_it-'0';
}
}
int main( ) {
getline( fin, buffer, (char)0 );
buffer_it= buffer.begin();
int n, m;
read_int_nn(n), read_int_nn(m);
for ( int i= 1, x; i<=n; ++i ) {
read_int_nn(x);
a[i]= (i64)a[i-1]+x;
b[i]= (i64)b[i-1]+a[i-1];
}
for ( int i= n-1; i>=1; --i ) {
c[i]= (i64)c[i+1]+a[n]-a[i];
}
for ( int cnt= 1; cnt<=m; ++cnt ) {
int x, y;
read_int_nn(x), read_int_nn(y);
int sol= x, step;
for ( step= 1; step<=y-x; step*= 2 ) ;
for ( ; step>0; step/= 2 ) {
if ( sol+step<=y && a[sol+step-1]-a[x-1]<a[y]-a[sol+step-1] ) {
sol+= step;
}
}
i64 a1= (i64)b[sol]-b[x]-((i64)sol-x)*a[x-1], a2= (i64)c[sol]-c[y]-((i64)y-sol)*(a[n]-a[y]);
fout<<sol<<" "<<(i64)a1+a2<<"\n";
}
return 0;
}