Submission #1311002

#TimeUsernameProblemLanguageResultExecution timeMemory
1311002anandswaroop191Happiness (Balkan15_HAPPINESS)C++20
100 / 100
1368 ms372280 KiB
#include <bits/stdc++.h> #include "happiness.h" using namespace std; #define int long long using pii = pair<int, int>; #define read(a) for (auto &x : a) cin >> x #define V vector #define show(a) for (auto x : a) cout << x << " "; cout << endl; const int ninf = numeric_limits<int>::max(); struct Node { int l, r, s; Node *ln, *rn; }; void fn(Node *n) { if (n == nullptr) return; fn(n->ln); fn(n->rn); delete n; } void u(Node *n, int x, int ct) { auto &[l, r, s, ln, rn] = *n; s += x * ct; if (l == r) return; int m = (l + r) / 2; if (x <= m) { if (!ln) ln = new Node {l, m, 0, nullptr, nullptr}; u(ln, x, ct); } else { if (!rn) rn = new Node {m + 1, r, 0, nullptr, nullptr}; u(rn, x, ct); } } void showtree(Node *n, int lev) { for (int i = 0; i < lev; i ++) cout << ' '; if (!n) { printf("[null]\n"); return; } printf("[%lld, %lld], s=%lld\n", n->l, n->r, n->s); showtree(n->ln, lev + 2); showtree(n->rn, lev + 2); } int qu(Node *n, int ql, int qr) { if (!n) return 0; auto &[l, r, s, ln, rn] = *n; if (qr < l || r < ql) return 0; if (ql <= l && r <= qr) return s; return qu(ln, ql, qr) + qu(rn, ql, qr); } Node *st; bool check() { int cur = 1, tot = st->s; while (cur < tot) { int s = qu(st, 1, cur); if (s < cur) return false; cur = s + 1; } return true; } bool init(signed n, int m, int coins[]) { st = new Node {1, m, 0, nullptr, nullptr}; for (int i = 0; i < n; i ++) { u(st, coins[i], 1); } // showtree(st, 0); return check(); } bool is_happy(signed ev, signed c, int coins[]) { for (int i = 0; i < c; i ++) { u(st, coins[i], ev); } // showtree(st, 0); return check(); } // #define NMAX 200000 // #define QMAX 100000 // static signed N, Q; // static long long M; // static long long coins[NMAX], A[5]; // signed main() // { // signed i, d; // long long max_code; // scanf("%d%lld", &N, &M); // for (i = 0; i < N; ++i) { // scanf("%lld", &coins[i]); // } // if (init(N, M, coins))printf("1\n"); // else printf("0\n"); // scanf("%d", &Q); // for (i = 0; i < Q; ++i) { // signed ck, c; // scanf("%d%d", &ck, &c); // for (int j = 0; j < c; j++) { // scanf("%lld", &A[j]); // } // if (is_happy(ck, c, A))printf("1\n"); // else printf("0\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...