inlinevoidsolve(){ cin >> n >> m; string S; cin >> S; vector<pair<int, int>> in(m); for(int i = 0; i < m; i ++) cin >> in[i].first >> in[i].second; for(int i = 0; i < n; i ++) A[i + 1] = Map[S[i]]; for(auto [l, r] : in) L[r].emplace_back(l - 1); ans = 0; auto f = calc(); for(int i = 1; i <= n; i ++) A[i] ^= 1, L[i].clear(); reverse(A + 1, A + n + 1); for(int i = 0; i < m; i ++) { in[i].first = n - in[i].first + 1; in[i].second = n - in[i].second + 1; swap(in[i].first, in[i].second); L[in[i].second].emplace_back(in[i].first - 1); } auto g = calc(); for(int i = 1; i <= n; i ++) L[i].clear(); ans /= 4; for(auto [x, y] : f) ans += min(y, g[x]); cout << ans << '\n'; }
inlinelonglongf(longlong n, longlong k){ // 计算游戏需要几轮才能结束 longlong ans = 0; while(n) { longlong d = (n + k - 1) / k; longlong c = (n - k * (d - 1) - 1) / d + 1; n -= c * d; ans += c; } return ans - 1; } longlongg(longlong p, longlong k, longlong C){ // 这里传进的 k 实际上为分母 k - 1 // C 表示剩余轮数 if(C == 0) return p; longlong d = (p + k - 1) / k; longlong x = (k * d - p) / d + 1; x = min(x, C); returng(p + x * d, k, C - x); }
inlinevoidsolve(){ longlong n, k; cin >> n >> k; cout << g(1, k - 1, f(n, k)) << '\n'; }
inlineboolcheck(int l, int r){ vector<int> v(A + l, A + r + 1); vector<int> lsh = v; int n = r - l + 1; sort(lsh.begin(), lsh.end()); for(int i = 0; i < n; i ++) v[i] = lower_bound(lsh.begin(), lsh.end(), v[i]) - lsh.begin(); vector<pair<int, int>> stk; stk.push_back({v[0], v[0]}); for(int i = 1; i < n; i ++) { stk.push_back({v[i], v[i]}); while(stk.size() >= 2 && merge_check(stk[stk.size() - 2], stk[stk.size() - 1])) { stk[stk.size() - 2] = merge(stk[stk.size() - 2], stk[stk.size() - 1]); stk.pop_back(); } } return stk.size() == 1; }
inlinevoidsolve(){ cin >> n; for(int i = 1; i <= n; i ++) cin >> A[i]; int s = 0; for(int l = 1; l <= n; l ++) { int L = l + 1, R = l + 1, d = 2; while(R <= n && check(l, R)) d <<= 1, R = min(n + 1, l + d - 1); R --; while(L < R) { int mid = (L + R + 1) >> 1; if(check(l, mid)) L = mid; else R = mid - 1; } s ++, l = R; } cout << (n - s) << '\n'; }
inlinevoidsolve(){ cin >> n >> m; for(int i = 1; i <= n; i ++) cin >> A[i]; for(int i = 1; i <= m; i ++) cin >> B[i]; sort(A + 1, A + n + 1), sort(B + 1, B + m + 1); longlong c = n; int k = 0; for(int i = 1; i <= n; i ++) k += (A[i] == 1); if(k) c -= (k - 1); int i = 1, j = 1; while(i <= n && A[i] == 1) i ++; for(int x = 1; x <= n; x ++) A[x] --; while(j <= m && c >= 0) { while(true) { if((j > m || B[j] > k) && (i > n || A[i] > k)) break; while(j <= m && B[j] <= k) k ++, j ++; while(i <= n && A[i] <= k) k ++, i ++; } if(j <= m) c -= (B[j] - k), B[j] = k; } cout << (c >= 0 ? "Yes" : "No") << '\n'; }
inlinevoidsolve(){ int n, m; cin >> n >> m; vector<vector<int>> A(n, vector<int>(m)); int k = 1; for(int i = 0; i < m; i ++) for(int j = 0; j <= i && j < n; j ++) A[j][i - j] = k ++; for(int i = 1; i < n; i ++) { for(int d = 0; i + d < n && m - 1 - d >= 0; d ++) A[i + d][m - 1 - d] = k ++; } cout << "Yes" << '\n'; for(int i = 0; i < n; i ++) for(int j = 0; j < m; j ++) cout << A[i][j] << " \n"[j == m - 1]; }