Cod sursa(job #254601)
Utilizator | Data | 7 februarie 2009 13:11:07 | |
---|---|---|---|
Problema | Cuburi2 | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Stelele Informaticii 2009, clasele 9-10, ziua 2 | Marime | 1.92 kb |
#include<fstream.h>
#include<iostream.h>
int n,m,a[1000000],i,j,i1[1000000],i2[1000000],max,mij,l,j1,j2,d[1000000],inc,sf;
long long min=999999999;
int pozmin;
int suma( int inceput, int sfarsit)
{
int s=0,q;
for(q=inceput;q<=sfarsit;q++)
s=s+a[q];
return s;
}
int sumas(int inceput, int sfarsit)
{
int q,s=0;
for(q=inceput+1;q<=sfarsit;q++)
s=s+(a[q]*(q-inceput));
return s;
}
int main()
{
ifstream in("cuburi2.in");
ofstream out("cuburi2.out");
in>>n>>m;
for(i=1;i<=n;i++)
in>>a[i];
for(i=1;i<=m;i++)
in>>i1[i]>>i2[i];
in.close();
for(l=1;l<=m;l++)
{
inc=i1[l];
sf=i2[l];
d[inc]=sumas(inc,sf);
if(d[i]<min)
{
min=d[inc];
pozmin=inc;
}
for(i=inc+1;i<=sf;i++)
{
d[i]=d[i-1]-suma(i+1,sf)+suma(inc,i-1)-a[i];
if(d[i]<min)
{
min=d[i];
pozmin=i;
}
}
out<<pozmin<<" "<<min<<endl;
}
return 0;
}