Pagini recente » Cod sursa (job #2198682) | Cod sursa (job #638923) | Cod sursa (job #1089228) | Cod sursa (job #3158847) | Cod sursa (job #254727)
Cod sursa(job #254727)
#include <stdio.h>
#define N 250005
int n,m,v[N];
void citire()
{
int i;
scanf("%d%d",&n,&m);
for (i=1; i<=n; i++)
scanf("%d",&v[i]);
}
int modul(int x,int y)
{
if (x>y)
return x-y;
return y-x;
}
long long operatie(int x,int y,int k)
{
int i;
long long s=0;
for (i=x; i<=y; i++)
{
s+=v[i]*modul(i,k);
}
return s;
}
int calcul(int x,int y)
{
int i,pozmin=0;
long long min;
long long t;
min=operatie(x,y,x);
pozmin=x;
for (i=x+1; i<=y; i++)
{
t=operatie(x,y,i);
if (t<min)
{
min=t;
pozmin=i;
}
}
printf("%d %lld\n",pozmin,min);
return 0;
}
int calcul2(int x,int y)
{
int i,pozmin=0,s=0,sum=0;
for (i=x; i<=y; i++)
s+=v[i];
for (i=x; i<=y && sum<=s/2; i++)
{
sum+=v[i];
pozmin=i;
}
printf("%d %lld\n",pozmin,operatie(x,y,pozmin));
return 0;
}
void rezolvare()
{
int i,x,y;
for (i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
if (y-x<=5000 && m<=5000)
calcul(x,y);
else
calcul2(x,y);
}
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
citire();
rezolvare();
return 0;
}