tuple<int, int, int> insert(int data, int pos) { r.insert(pos, data); auto it = r.begin() + pos; int p = prev(it); int q = next(it); return make_tuple(p, data, q); }
tuple<int, int, int> remove(int pos) { auto it = r.begin() + pos; int del = *it; int p = prev(it); int q = next(it); r.erase(pos, 1); return make_tuple(p, del, q); }
_Rope_iterator<_CharT, _Alloc>::_Rope_iterator(rope<_CharT,_Alloc>& __r, size_t __pos): _Rope_iterator_base<_CharT,_Alloc>(__r._M_tree_ptr._M_data, __pos), _M_root_rope(&__r) { #if !defined (__DMC__) _RopeRep::_S_ref(this->_M_root); if (!(__r.empty()))_S_setcache(*this); #else _Rope_iterator_base<_CharT, _Alloc>* __x = this; _RopeRep::_S_ref(this->_M_root); if (!(__r.empty()))_S_setcache(*__x); #endif }
int main(){ ios::sync_with_stdio(0); cin>>a; cin>>n; for(int i=0;i<(int)a.length();i++)r.insert(i,a[i]); //cout<<r; while(n--){ cin>>k; if(k!='Q'){ cin>>c>>t; r.insert(t-1,c); }else{
int prev(rope<int>::const_iterator it) { if (it == r.begin()) return *r.rbegin(); it--; return *it; }
int next(rope<int>::const_iterator it) { it++; if (it == r.end()) return *r.begin(); return *it; }
void init() { r.clear(); }