#include using namespace std; template struct SparseTable{ vector> dat; vector lookup; typedef function Func; Func f; T e; SparseTable(){} SparseTable(const vector &v, Func f, T e){ initialize(v, f, e); } void initialize(const vector &v, Func fin, T ein){ f = fin; e = ein; int b = 0; while((1<(N, e)); for(int i=0; i>1] + 1; } } T between(int l, int r) { r++; int b = lookup[r-l]; return f(dat[b][l], dat[b][r-(1<> N; vector A(N); for(int i=0; i> A[i]; cin >> Q; vector X(Q); for(int i=0; i> X[i]; SparseTable st(X, [](int a, int b){ return min(a, b);}, 2e9); vector imos(Q+1); for(int i=0; i1){ int mid = (ok+ng)/2; (st.between(p, mid) <= a ? ok : ng) = mid; } imos[p] += a; imos[ok] -= a; if(ok < Q) a %= X[ok]; p = ok; } } for(int i=1; i