int main(){ int n, ans; cin >> n; RMQ r; r.init(n); for(int j=0;j<n;j++){ cin >> a[j]; r.update(j,-a[j]); } for(int x=0;x<n;x++){ int head = 0,tail = x,now; ans = 0; while(head != tail && x > 0){ now = (head + tail)/2; //cout << x << "-L:" << head << " " << tail << " " << now << " " << r.query(now,x) << endl;// if(r.query(now,x)>=-a[x])tail=now; else head=now+1; } ans += x - head; head = x,tail = n-1; while(head != tail && x < n-1){ now = (head + tail+1)/2; //cout << x << "-R:" << head << " " << tail << " " << now << " " << r.query(x,now) << endl;// if(r.query(x,now)>=-a[x])head=now; else tail=now-1; } ans += head - x; cout << ans << endl; } return 0; }
REP(i, m) { int s = sorters[i].first; int t = sorters[i].second; int minLength = rmq.query(s-1, t); //dp[t] = min(minLength + 1, dp[t]); int next = min(minLength + 1, rmq.query(t-1, t)); rmq.update(t-1, next); }
void solve4(RMQ& rmq, vector<int>& FIRE, int N, int P){ for (int i = P; i < N; i++){ int start = i - P; int end = i - 1; FIRE[i] += rmq.query(start, end); rmq.update(i, FIRE[i]); } }
bool query(int l, int r) { int updowns = qs[r] - qs[l] - abs(middle[r] - middle[l]); int ups, summit; int ups_min, downs_min; if (updowns < 0) { return false; } if (updowns % 2 != 0) { return false; } ups = updowns / 2 + max(0, middle[l] - middle[r]); summit = max((int)(lower_bound(qs+ l, qs + r, qs[l] + ups) - qs), l); ups_min = highs.query(l, summit + 1); downs_min = lows.query(summit + 1, r + 1); return (ups_min == INF || ups_min == highs.query(l, l + 1)) && (downs_min == INF || downs_min == lows.query(r, r + 1)); }
ll without(RMQ<pii>& minxrmq, RMQ<pii>& minyrmq, RMQ<pii>& maxxrmq, RMQ<pii>& maxyrmq, int l, int r, int excluded) { pii minx = min(minxrmq.query(l, excluded), minxrmq.query(excluded + 1, r)); pii miny = min(minyrmq.query(l, excluded), minyrmq.query(excluded + 1, r)); pii maxx = min(maxxrmq.query(l, excluded), maxxrmq.query(excluded + 1, r)); pii maxy = min(maxyrmq.query(l, excluded), maxyrmq.query(excluded + 1, r)); ll dx = (-maxx.first - minx.first); ll dy = (-miny.first - maxy.first); return max(dx, dy); }
long long query(int delta_t, T delta_v){ // only positive deltas assert (delta_t > 0); ans = 0; int n = seq.size(); // this loop fix each possible beginning // and checks inside it if it is valid for (int i = 0; i < seq.size(); ++i){ int m = rmqMax->query(i, (i + delta_t < n )? (i+delta_t): n - 1); if (seq[m] - seq[i] >= delta_v) ++ans; } return ans; }
int main(){ cin.tie(0); ios::sync_with_stdio(false); ll n,q,c,x,y; RMQ rmq; cin >> n >> q; rmq.init(n); rep(i,q){ cin >> c >> x >> y; if(c == 0){ rmq.update(x,y); } else{ cout << rmq.query(x,y) << endl; } }
int query(int u, int v){ if(H[v] < H[u])swap(u,v); return E[rmq.query(H[u],H[v])]; }
int commonPrefix(SA &sa, RMQ &rmq, int p1, int p2){ p1 = sa.rnk[p1]; p2 = sa.rnk[p2]; if (p1 > p2) swap(p1, p2); return rmq.query(p1, p2 - 1); }