Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. //Why 860?
  2. #pragma GCC optimize ("Ofast,unroll-loops")
  3. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6. #define fastio ios_base::sync_with_stdio(0);cin.tie(0);
  7. #define all(v) (v).begin(),(v).end()
  8. #define pb push_back
  9. #define mp make_pair
  10. #define sz(v) ((int)v.size())
  11. #define FER(i,x,y) for(int i=x, j = y; i < j; ++ i)
  12. #define IFR(i,x,y) for(int (i)=(x);(i)>=(y);(i)--)
  13. #define ff first
  14. #define ss second
  15. typedef pair<int, int> ii;
  16.  
  17. const int N = 1e5 + 2;
  18.  
  19. struct SegmentTree{
  20. int n;
  21. ii t[2 * N];
  22. ii OpId = ii(-1e9, 1e9);
  23. SegmentTree(){}
  24. ii Op(ii &a, ii &b){
  25. if(a.ff > b.ff) return a;
  26. else if(a.ff == b.ff && a.ss < b.ss) return a;
  27. else return b;
  28. }
  29. void build(){ IFR(i, n - 1, 1) t[i] = Op(t[i << 1], t[i << 1 | 1]);}
  30. ii query(int l, int r){
  31. ii ansl, ansr;
  32. ansl = ansr = OpId;
  33. for(l += n, r += n; l < r; l >>= 1, r >>= 1){
  34. if(l&1) ansl = Op(t[l ++], ansl);
  35. if(r&1) ansr = Op(t[-- r], ansr);
  36. }
  37. return Op(ansl, ansr);
  38. }
  39. }st;
  40.  
  41. int main(){
  42. fastio;
  43. int t; cin >> t;
  44. while(t --){
  45. string s; cin >> s;
  46. int k; cin >> k;
  47. if(k>= sz(s)){
  48. cout << endl;
  49. continue;
  50. }
  51. st.n = sz(s);
  52. FER(i, 0, sz(s)) st.t[i + st.n] = mp((int)(s[i] - '0'), i);
  53. st.build();
  54. // FER(i, 0, 2 * st.n) cout << st.t[i].ff << " " << st.t[i].ss << endl;
  55. int pos = 0;
  56. int falta = k;
  57. string ans = "";
  58. while(pos + falta< st.n){
  59. //cout << pos << " " << falta << " " << st.n << endl;
  60. ii res = st.query(pos, pos + falta + 1);
  61. int newpos = res.ss, val = res.ff;
  62. int quita = newpos - pos;
  63. falta -= quita;
  64. //cout << quita << " " << newpos << endl;
  65. pos = newpos + 1;
  66. ans += (char)(val + '0');
  67. }
  68. cout << ans << endl;
  69. }
  70. return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement