fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const long long MaxN = 1e6 +5;
  4. long long n,q,a[MaxN],b[MaxN];
  5. struct Segtree_lazy
  6. {
  7. vector<long long> lazy;
  8. void init(long long n)
  9. {
  10. if(n==0) return;
  11. lazy.assign(4*n+1,-1);
  12. }
  13. void push_down(long long id,long long l ,long long r)
  14. {
  15. if(lazy[id]==-1) return;
  16. long long mid = (l+r)>>1;
  17. lazy[2*id]=lazy[id];
  18. lazy[2*id+1]=lazy[id]+(mid+1-l);
  19. lazy[id] = -1;
  20. }
  21. void update(long long id, long long l, long long r, long long u, long long v, long long x)
  22. {
  23. if(l>v||r<u)
  24. {
  25. return;
  26. }
  27. if(u<=l&&r<=v)
  28. {
  29. lazy[id]= x+(l-u);
  30. return;
  31. }
  32. long long mid = (l+r)>>1;
  33. push_down(id,l,r);
  34. update(2 * id, l, mid, u, v, x);
  35. update(2 * id + 1, mid + 1, r, u, v, x);
  36. }
  37. long long get(long long id, long long l, long long r, long long u)
  38. {
  39. if(l==r)
  40. {
  41. if(lazy[id]==-1)
  42. {
  43. return b[l];
  44. }
  45. else
  46. {
  47. return a[lazy[id]];
  48. }
  49. }
  50. long long mid = (l+r)>>1;
  51. push_down(id,l,r);
  52. if(u<=mid)
  53. {
  54. return get(2*id,l,mid,u);
  55. }
  56. else
  57. {
  58. return get(2*id+1,mid+1,r,u);
  59. }
  60. }
  61. void update(long long u, long long v, long long x)
  62. {
  63. update(1,1,n,u,v,x);
  64. }
  65. long long get(long long i)
  66. {
  67. return get(1,1,n,i);
  68. }
  69. };
  70. Segtree_lazy st;
  71. int main()
  72. {
  73. ios_base::sync_with_stdio(0);
  74. cin.tie(0);
  75. cin >> n >> q;
  76. st.init(n);
  77. for (long long i=1; i<=n; i++) cin >> a[i];
  78. for (long long i=1; i<=n; i++) cin >> b[i];
  79. while(q--)
  80. {
  81. long long num;
  82. cin >> num;
  83. if(num==1)
  84. {
  85. long long x,y,k;
  86. cin >> x >> y >> k;
  87. st.update(y,y+k-1,x);
  88. }
  89. else
  90. {
  91. long long i;
  92. cin >> i;
  93. cout << st.get(i) << "\n";
  94. }
  95. }
  96. }
  97.  
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
Standard output is empty