Cod sursa(job #1885005)

Utilizator shantih1Alex S Hill shantih1 Data 19 februarie 2017 15:48:37
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#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
*/