#include<bits/stdc++.h> usingnamespace std; typedeflonglong ll; constint MOD = 998244353; boolisValid(const vector<pair<int, int>> &s, int c, int n){ vector<int> cov(n + 1, 0); for (int i = 0; i < s.size(); i++) { // 检查第i个线段是否被选中 // 选中的线段,将覆盖的点的覆盖次数加1 if (c & (1 << i)) { for (int j = s[i].first; j <= s[i].second; j++) { cov[j]++; } } } for (int i = 1; i <= n; i++) { if (cov[i] < 2) returnfalse; } returntrue; } intmain(){ ll n, m, ans = 0; cin >> n >> m; vector<pair<int, int>> s(m); for (int i = 0; i < m; i++) { cin >> s[i].first >> s[i].second; } for (int i = 0; i < (1 << m); i++) { if (isValid(s, i, n)) { ans++; ans %= MOD; } } cout << ans << endl; return0; }
#include<bits/stdc++.h> usingnamespace std; typedeflonglong ll; intmain(){ ll n, q; cin >> n >> q; vector<ll> a(n), b(n), preA(n + 1, 0); for (ll i = 0; i < n; ++i) { cin >> a[i]; preA[i + 1] = preA[i] + a[i]; } for (ll i = 0; i < n; ++i) { cin >> b[i]; } while (q--) { int k; cin >> k; // 1. get the sum of the first k A tasks ll sum = preA[k] - preA[0], now = 0; // pq is a max heap priority_queue<int> pq; // 2. pq push the first k B tasks // now is the sum of the first k B tasks for (int i = 0; i < k; i++) { pq.push(b[i]); now += b[i]; } ll ans = now + sum; // add [k, n) B tasks for (int i = k; i < n; i++) { sum += a[i]; pq.push(b[i]); now += b[i]; now -= pq.top(); pq.pop(); ans = min(ans, now + sum); } cout << ans << endl; } return0; }