Pagini recente » Cod sursa (job #812612) | Cod sursa (job #1279899) | Cod sursa (job #2255485) | Cod sursa (job #2132938) | Cod sursa (job #1885005)
#include <iostream>
#include <fstream>
#include <numeric>
using namespace std;
long long in, i, j;
long long st, dr, mid;
long long s, x, v[30002], n, poz;
int main () {
ifstream fin("br.in");
ofstream fout("br.out");
fin >> n >> in;
for (i = 1; i <= n; i++)
{ fin >> v[i]; v[i+n] = v[i]; s += v[i]; v[i] = s; }
for (i = n+1; i <= n*2; i++) v[i] = v[i-n]+s;
for (i = 1; i <= in; i++)
{
fin >> poz >> s;
st = poz; dr = poz+n-1;
while (st <= dr && s != x)
{
mid = st + (dr-st)/2;
x = v[mid]-v[poz-1];
if (s < x) dr = mid-1;
else if (s > x) st = mid+1;
}
if (v[mid]-v[poz-1] >= v[poz+n-1]-v[poz-1]) mid = poz+n;
while (v[mid-1]-v[poz-1] > s && mid > poz) mid--;
while (v[mid]-v[poz-1] <= s && mid < poz+n) mid++;
if (mid < poz) mid = poz;
fout << mid-poz << "\n";
}
}
/*5 1
10 5 15 22 13 20 10 5 15 22 13 20
4 21
*/