Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- mt19937 mt (time (NULL));
- int get_random() {
- return uniform_int_distribution<int> (0, 2e9) (mt);
- }
- struct Treap {
- int treap_size = 1, priority = get_random();
- char value;
- Treap *l = NULL, *r = NULL;
- Treap() {}
- Treap (int value) : value (value) {}
- };
- int treap_size (Treap *treap) {
- return treap == NULL ? 0 : treap->treap_size;
- }
- void push_up (Treap *treap) {
- treap->treap_size = treap_size (treap->l) + treap_size (treap->r) + 1;
- }
- Treap *Merge (Treap *a, Treap *b) {
- if (a == NULL)
- return b;
- if (b == NULL)
- return a;
- if (a->priority < b->priority) {
- b->l = Merge (a, b->l);
- push_up (b);
- return b;
- } else {
- a->r = Merge (a->r, b);
- push_up (a);
- return a;
- }
- }
- void Split (Treap *treap, Treap *&a, Treap *&b, int k) {
- if (treap == NULL) {
- a = b = NULL;
- return;
- }
- if (treap_size (treap->l) >= k) {
- b = treap;
- Split (treap->l, a, b->l, k);
- push_up (b);
- } else {
- a = treap;
- Split (treap->r, a->r, b, k - treap_size (treap->l) - 1);
- push_up (a);
- }
- }
- string result;
- void dfs (Treap *t) {
- if (t == NULL) return;
- dfs (t->l);
- result += t->value;
- dfs (t->r);
- }
- string get_decode (string e, string s) {
- Treap *t = NULL;
- int cnt = 0;
- for (int i = e.size() - 1; i >= 0; i--) {
- if (e[i] == '0') {
- t = Merge (new Treap (s[i]), t);
- } else {
- t = Merge (t, new Treap (s[i]));
- cnt++;
- }
- }
- if (cnt % 2 == 1) {
- int need = s.size() / 2;
- if (s.size() % 2 == 1) {
- Treap *t1, *t2;
- Split (t, t1, t, need);
- Split (t, t, t2, 1);
- t = Merge (Merge (t2, t), t1);
- } else {
- Treap *t1;
- Split (t, t1, t, need);
- t = Merge (t, t1);
- }
- }
- result.clear();
- dfs (t);
- return result;
- }
- int main() {
- int m, n;
- cin >> m >> n;
- string s, e[m];
- for (int i = 0; i < m; i++) {
- cin >> e[i];
- }
- cin >> s;
- for (int i = m - 1; i >= 0; i--) {
- s = get_decode (e[i], s);
- }
- cout << s << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment