Submission #624751

#TimeUsernameProblemLanguageResultExecution timeMemory
624751MilosMilutinovicSan (COCI17_san)C++14
24 / 120
131 ms14932 KiB
/** * author: wxhtzdy * created: 08.08.2022 18:38:51 **/ #include <bits/stdc++.h> using namespace std; template <typename T> class fenwick { public: vector<T> fenw; int n; fenwick(int _n) : n(_n) { fenw.resize(n); } void modify(int x, T v) { while (x < n) { fenw[x] += v; x |= (x + 1); } } T get(int x) { T v{}; while (x >= 0) { v += fenw[x]; x = (x & (x + 1)) - 1; } return v; } }; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; long long k; cin >> n >> k; vector<int> h(n); vector<long long> g(n); for (int i = 0; i < n; i++) { cin >> h[i] >> g[i]; } auto xs = h; sort(xs.begin(), xs.end()); xs.erase(unique(xs.begin(), xs.end()), xs.end()); for (int i = 0; i < n; i++) { h[i] = lower_bound(xs.begin(), xs.end(), h[i]) - xs.begin(); } int x = max(1, n / 2); int y = n - x; vector<pair<long long, int>> v; v.emplace_back(-1e18, 0); for (int mask = 0; mask < (1 << x); mask++) { int mx = 0; bool ok = true; long long sum = 0; for (int i = 0; i < x; i++) { if (mask >> i & 1) { if (mx > h[i]) { ok = false; break; } sum += g[i]; mx = h[i]; } } if (!ok) { continue; } v.emplace_back(sum, mx); } sort(v.begin(), v.end()); int m = (int) v.size(); vector<vector<int>> qs(m + 1); for (int mask = 0; mask < (1 << y); mask++) { int mx = -1; bool ok = true; long long sum = 0; for (int i = 0; i <= y; i++) { if (mask >> i & 1) { if (mx > h[x + i]) { ok = false; break; } sum += g[x + i]; mx = h[x + i]; } } if (!ok) { continue; } int idx = lower_bound(v.begin(), v.end(), make_pair(k - sum, -1)) - v.begin(); qs[idx].push_back((mx == -1 ? n - 1 : mx)); } long long ans = 0; fenwick<int> fenw(n); for (int i = m - 1; i >= 0; i--) { fenw.modify(v[i].second, 1); for (auto& p : qs[i]) { ans += fenw.get(p); } } cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...