Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Why 860?
- #pragma GCC optimize ("Ofast,unroll-loops")
- #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- #include <bits/stdc++.h>
- using namespace std;
- #define fastio ios_base::sync_with_stdio(0);cin.tie(0);
- #define all(v) (v).begin(),(v).end()
- #define pb push_back
- #define mp make_pair
- #define sz(v) ((int)v.size())
- #define FER(i,x,y) for(int i=x, j = y; i < j; ++ i)
- #define IFR(i,x,y) for(int (i)=(x);(i)>=(y);(i)--)
- #define ff first
- #define ss second
- typedef pair<int, int> ii;
- const int N = 1e5 + 2;
- struct SegmentTree{
- int n;
- ii t[2 * N];
- ii OpId = ii(-1e9, 1e9);
- SegmentTree(){}
- ii Op(ii &a, ii &b){
- if(a.ff > b.ff) return a;
- else if(a.ff == b.ff && a.ss < b.ss) return a;
- else return b;
- }
- void build(){ IFR(i, n - 1, 1) t[i] = Op(t[i << 1], t[i << 1 | 1]);}
- ii query(int l, int r){
- ii ansl, ansr;
- ansl = ansr = OpId;
- for(l += n, r += n; l < r; l >>= 1, r >>= 1){
- if(l&1) ansl = Op(t[l ++], ansl);
- if(r&1) ansr = Op(t[-- r], ansr);
- }
- return Op(ansl, ansr);
- }
- }st;
- int main(){
- fastio;
- int t; cin >> t;
- while(t --){
- string s; cin >> s;
- int k; cin >> k;
- if(k>= sz(s)){
- cout << endl;
- continue;
- }
- st.n = sz(s);
- FER(i, 0, sz(s)) st.t[i + st.n] = mp((int)(s[i] - '0'), i);
- st.build();
- // FER(i, 0, 2 * st.n) cout << st.t[i].ff << " " << st.t[i].ss << endl;
- int pos = 0;
- int falta = k;
- string ans = "";
- while(pos + falta< st.n){
- //cout << pos << " " << falta << " " << st.n << endl;
- ii res = st.query(pos, pos + falta + 1);
- int newpos = res.ss, val = res.ff;
- int quita = newpos - pos;
- falta -= quita;
- //cout << quita << " " << newpos << endl;
- pos = newpos + 1;
- ans += (char)(val + '0');
- }
- cout << ans << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement