Pagini recente » Cod sursa (job #596759) | Borderou de evaluare (job #2445876) | Borderou de evaluare (job #2842538) | Cod sursa (job #2000542) | Cod sursa (job #3324906)
#include <fstream>
using namespace std;
ifstream cin("cuburi2.in");
ofstream cout("cuburi2.out");
const int N = 250000;
int s1[N + 5],s2[N + 5],s11[N + 2],s22[N + 5],v[N + 5];
int main()
{
int n, m, x, y, st, dr, mij, caut, val, i;
cin >> n >> m;
for(i = 1; i <= n; i++)
{
cin >> v[i];
s1[i] = v[i];
s1[i] += s1[i - 1];
s11[i] = s1[i];
s11[i] += s11[i - 1];
}
for(i = n; i > 0; i--)
{
s2[i] = v[i];
s2[i] += s2[i + 1];
s22[i] = s2[i];
s22[i] += s22[i + 1];
}
for(i = 0; i < m; i++)
{
cin >> x >> y;
//printf("%d %d\n",x,y);
caut = s1[y] - s1[x - 1];
st = 1;
dr = n;
caut /= 2;
while(st <= dr)
{
mij = (st + dr) / 2;
if(s1[mij] - s1[x - 1] >= caut)
{
val = mij;
dr = mij - 1;
}
else st = mij + 1;
}
cout << val << " " << s11[val - 1] - s11[x - 1] + s22[val + 1] - s22[y + 1] << "\n";
}
return 0;
}