fork download
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define endl "\n"
  4. #define mii map<int,int>
  5. #define mll map<ll,ll>
  6. #define pii pair<int,int>
  7. #define pli pair<ll,int>
  8. #define pll pair<ll,ll>
  9. #define inf 1000000000000000000LL
  10. #define fi first
  11. #define se second
  12. using namespace std;
  13. int n, m, a[100005], b[100005], st[400005], lazy[400005], rpos;
  14. void fix(int id, int val) {
  15. st[id]=val;
  16. lazy[id]=val;
  17. return;
  18. }
  19. void down(int id, int l, int mid) {
  20. if (lazy[id]!=0) {
  21. fix(id*2,lazy[id]);
  22. fix(id*2+1,lazy[id]+mid-l+1);
  23. lazy[id]=0;
  24. }
  25. return;
  26. }
  27. void upd(int id, int l, int r, int u, int v, int le) {
  28. if (l>v || r<u) return;
  29. if (l>=u && r<=v) {
  30. fix(id,le+l-u);
  31. return;
  32. }
  33. int mid=(l+r)>>1;
  34. down(id,l,mid);
  35. upd(id*2,l,mid,u,v,le);
  36. upd(id*2+1,mid+1,r,u,v,le);
  37. return;
  38. }
  39. void gpos(int id, int l, int r, int pos) {
  40. if (l>pos || r<pos) return;
  41. if (l==r) {
  42. rpos=st[id];
  43. return;
  44. }
  45. int mid=(l+r)>>1;
  46. down(id,l,mid);
  47. gpos(id*2,l,mid,pos);
  48. gpos(id*2+1,mid+1,r,pos);
  49. return;
  50. }
  51. int main() {
  52. ios_base::sync_with_stdio(false);
  53. cin.tie(nullptr); cout.tie(nullptr);
  54. cin>>n>>m;
  55. for (int i=1; i<=n; i++) {
  56. cin>>a[i];
  57. }
  58. for (int i=1; i<=n; i++) {
  59. cin>>b[i];
  60. }
  61. while (m--) {
  62. int t; cin>>t;
  63. if (t==1) {
  64. int x, y, k;
  65. cin>>x>>y>>k;
  66. upd(1,1,n,y,y+k-1,x);
  67. }
  68. else {
  69. int x; cin>>x;
  70. gpos(1,1,n,x);
  71. if (rpos==0) cout<<b[x];
  72. else cout<<a[rpos];
  73. cout<<endl;
  74. }
  75. }
  76. return 0;
  77. }
  78.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty