#include #include #include using std::string; typedef unsigned long long priority_type; #define RAND_MAX (1 << 62) class line; typedef std::pair two_lines; class line { priority_type priority; string text; line *left, *right; public: line(priority_type _p, string _t) : priority(_p), text(_t) {} two_lines split(string s) { return two_lines(nullptr, nullptr); } void join(line *l) {} void insert(line *l) {} void remove(string s) {} line* find(string s) { return nullptr; } }; // Treap file representation struct file { line* root; file() { srand(120); root = nullptr; } void insert(string s) { line *l = new line(rand(), s); auto two = root->split(s); two.first->join(l); two.first->join(two.second); } void remove(string s) { auto two = root->split(s); two.first = two.first->split(s).first; // TODO sharp split two.first->join(two.second); } line* find(string s) { return root->find(s); } };