int main() { int high, low; int l, r; scanf("%d", &N); scanf("%s", S + 1); highs.init(N + 1); lows.init(N + 1); high = 0; low = 0; highs.update(0, 0); lows.update(0, 0); middle[0] = 0; qs[0] = 0; for (int i = 1; i <= N; i++) { middle[i] = middle[i - 1]; qs[i] = qs[i - 1]; switch(S[i]) { case '(': high++; low++; middle[i]++; break; case ')': high--; low--; middle[i]--; break; case '?': high++; low--; qs[i]++; break; } highs.update(i, high); lows.update(i, low); } scanf("%d", &Q); for (int q = 0; q < Q; q++) { scanf("%d%d", &l, &r); l--; printf("%s\n", query(l, r) ? "Yes" : "No"); } return 0; }
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; }
int main() { int n, m, l, r; set<pair<int, int> > st; scanf("%d%d", &n, &m); scanf("%s", buf); sa.init(n, buf); rmq.init(n, sa.height); l = 0; r = 1; for (int i = 0; i < m; ++i) { scanf("%s", op); int& t = op[0] == 'L' ? l : r; t += op[1] == '+' ? 1 : -1; int k = sa.rank[l]; int lo = 0, hi = k; while (lo < hi) { int mi = (lo + hi) / 2; if (rmq.value(mi + 1, k + 1) >= r - l) { hi = mi; } else { lo = mi + 1; } } st.insert(make_pair(hi, r - l)); } printf("%d\n", (int)st.size()); return 0; }
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 main() { int re, n, a, b, c; scanf("%d", &re); for (int ri = 1; ri <= re; ++ri) { scanf("%d", &n); for (int i = 0; i < n; ++i) { e[i].clear(); v[i] = w[i] = 0; } for (int i = 1; i < n; ++i) { scanf("%d%d", &a, &b); e[a].push_back(b); e[b].push_back(a); } m = rmq.n = 0; dfs(0); rmq.init(); scanf("%d", &m); fill(v, v + n, 0); fill(w, w + n, 0); for (int i = 0; i < m; ++i) { scanf("%d%d%d", &a, &b, &c); v[a] += c; v[b] += c; w[lca(a, b)] += c; } gao(0); printf("Case #%d:\n", ri); for (int i = 0; i < n; ++i) { printf("%d\n", v[i] - w[i]); } } return 0; }