Pagini recente » Istoria paginii utilizator/renteadan | Cod sursa (job #1117440) | Cod sursa (job #2693140) | Cod sursa (job #984887) | Cod sursa (job #771258)
Cod sursa(job #771258)
#include<stdio.h>
FILE *f = fopen("cuburi2.in","r");
FILE *g = fopen("cuburi2.out","w");
#define MaxN 250100
#define INF 1LL<<58;
#define ll long long
#define formula (1LL*Best_S[i]-1LL*(i-x+1)*B_S[x]-1LL*Best_S[x-1]+1LL*Best_D[i]-1LL*(y-i+1)*B_D[y]-1LL*Best_D[y+1])
int N,M,Poz;
ll Sol;
int A[MaxN],B_S[MaxN],B_D[MaxN],Best_S[MaxN],Best_D[MaxN];
void citire(void)
{
fscanf(f,"%d %d",&N,&M);
for(int i=1;i<=N;i++)
fscanf(f,"%d ",&A[i]);
}
void Afisare(int A[])
{
for(int i=1;i<=N;i++)
printf("%d ",A[i]);
printf("\n");
}
void Preprocesare(void)
{
for(int i=1;i<=N;i++)
B_S[i] = B_S[i-1]+A[i-1];
for(int i=1;i<=N;i++)
Best_S[i] = Best_S[i-1]+B_S[i];
for(int i=N;i;i--)
B_D[i] = B_D[i+1]+A[i+1];
for(int i=N;i;i--)
Best_D[i] = Best_D[i+1]+B_D[i];
Afisare(B_S);
Afisare(B_D);
Afisare(Best_S);
Afisare(Best_D);
}
inline ll min(ll a,ll b)
{
return a < b ? a : b;
}
inline void Minim(int x,int y)
{
Sol = INF;
for(int i=x;i<=y;i++)
{
printf("%lld ",formula);
if(Sol > formula)
Sol = formula, Poz = i;
}
printf("\n");
}
void Rezolvare(void)
{
int a,b;
Preprocesare();
for(int i=1;i<=M;i++)
{
fscanf(f,"%d %d",&a,&b);
Minim(a,b);
fprintf(g,"%d %lld\n",Poz,Sol);
}
}
int main()
{
citire();
Rezolvare();
}