1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include<iostream> #include<algorithm> #include<vector> using namespace std; typedef uint64_t ll; const int N=200010; const ll INF=1e18; ll lst[N]; ll num[N]; int n,q;
void qurray(ll x){ while(true){ ll pos=upper_bound(num+1,num+n+1,x)-num; if(pos==1){ cout<<lst[1]<<endl; } if(x%num[pos-1]==0){ cout<<lst[pos-1]<<" "; return; } x%=num[pos-1]; } }
int main() { int t; cin>>t; while(t--){ cin>>n>>q; for(int i=1;i<=n;i++){ ll op,x; cin>>op>>x; if(op==1){ num[i]=num[i-1]+1; lst[i]=x; }else{ ll a=x+1; if(num[i-1]!=0){ a=min(a,INF/num[i-1]+1); } num[i]=num[i-1]*a; lst[i]=lst[i-1]; } } while(q--){ ll x; cin>>x; qurray(x); } cout<<endl; } return 0; }
|