Pagini recente » Cod sursa (job #1253258) | Cod sursa (job #988072) | Cod sursa (job #3263343) | Cod sursa (job #1140334) | Cod sursa (job #696847)
Cod sursa(job #696847)
#include<stdio.h>
FILE *f , *g ;
long long s1[250010] , s2[250010] , c1[250010] , c2[250010] , cost1 , cost2 , n , m , v[250010] , x , y, aux , poz ;
void citire();
void solve();
void caut(long long x , long long y);
int main()
{
citire();
solve();
return 0;
}
void citire()
{
f=fopen("cuburi2.in" , "r" );
fscanf(f , "%lld%lld" , &n , &m );
for( long i = 1 ; i<= n ; ++i )
fscanf(f , "%lld" , &v[i] );
}
void solve()
{
g=fopen("cuburi2.out" ,"w" );
for(long i = 1 ; i<=n ; ++i )
{
s1[i] = s1[i-1]+v[i];
c1[i] = c1[i-1]+s1[i-1];
}
for(long i = n ; i ; --i )
{
s2[i] = s2[i+1]+v[i];
c2[i] = s2[i+1]+c2[i+1];
}
for(long i = 1 ; i<= m; ++i )
{
fscanf(f , "%lld%lld" , &x , &y );
if(x >y )
{aux = x; x = y ; y = aux;}
caut(x,y);
cost1 = c1[poz] - c1[x]-(poz-x)*s1[x-1];
cost2 = c2[poz] - c2[y]-(y-poz)*s2[y+1];
fprintf(g , "%lld " ,poz);
fprintf(g , "%lld\n" , cost1 + cost2);
}
fclose(f);
fclose(g);
}
void caut( long long x ,long long y)
{
long long ls , ld , mid ;
ls = x ; ld = y;
while(ls <= ld )
{
mid = (ls+ld)/2;
if(s1[mid-1]-s1[x-1] > s1[y]-s1[mid-1])
ld = mid-1;
else
{
ls = mid+1;
poz = mid;
}
}
}