Submission #118763

#TimeUsernameProblemLanguageResultExecution timeMemory
118763silxikysIce Hockey World Championship (CEOI15_bobek)C++14
40 / 100
1061 ms165028 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int maxn = 40; struct SegDyn { ll s, e, m; //represents range [s,e] SegDyn *l, *r; int sum; //sum for this interval SegDyn(ll _s, ll _e) { s = _s; e = _e; m = (s+e)/2; l = NULL; r = NULL; sum = 0; } void prepareL() { if (l == NULL) l = new SegDyn(s,m); } void prepareR() { if (r == NULL) r = new SegDyn(m+1,e); } void pull() { sum = 0; if (l) sum += l->sum; if (r) sum += r->sum; } void add(ll idx, int del) { //a[idx] += del //cout << s << ' ' << e << '\n'; if (s == e && s == idx) { //at the node, stop sum += del; return; } if (idx <= m) { prepareL(); assert(l); l->add(idx,del); } else { prepareR(); r->add(idx,del); } pull(); //updates current node based on the children } int getsum(ll se, ll en) { if (se <= s && e <= en) return sum; int res = 0; if (l && se <= m) res += l->getsum(se,en); if (r && en > m) res += r->getsum(se,en); return res; } }; int N, M; ll A[maxn], B[maxn]; int main() { cin >> N >> M; int split = N/2; for (int i = 0; i < split; i++) { cin >> A[i]; } for (int i = split; i < N; i++) { cin >> B[i-split]; } SegDyn *root = new SegDyn(0,1e18+5); for (int i = 0; i < (1<<split); i++) { ll total = 0; for (int j = 0; j < split; j++) { if (i & (1<<j)) total += A[j]; } root->add(total,1); } ll ans = 0; for (int i = 0; i < (1<<(N-split)); i++) { ll total = 0; for (int j = 0; j < N-split; j++) { if (i & (1<<j)) total += B[j]; } if (total <= M) { ans += root->getsum(0,M-total); } } cout << ans << '\n'; }
#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...
#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...