Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define s second
- #define f first
- #define lb lower_bound
- #define pb push_back
- #define endl "\n"
- #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- using namespace std;
- const int mod1 = 1e9 + 7;
- const int mod2 = 676767677;
- const int MAXN = 1e6 + 5;
- const int INF = 1e9 + 7;
- int t[4 * MAXN], a[MAXN], b[MAXN];
- void push(int v, int tl, int tr){
- if (t[v] != 0){
- int tm = (tl + tr) >> 1;
- t[v << 1] = t[v];
- t[(v << 1) | 1] = t[v] + (tm - tl + 1);
- t[v] = 0;
- }
- }
- void update(int v, int tl, int tr, int l, int r, int val){
- if (l > r){
- return;
- }
- if (tl == l && tr == r){
- t[v] = val;
- return;
- }
- int tm = (tl + tr) >> 1;
- push(v, tl, tr);
- update(v << 1, tl, tm, l, min(r, tm), val);
- update((v << 1) | 1, tm + 1, tr, max(l, tm + 1), r, val + max(0, (min(r, tm) - l + 1)));
- }
- int get_pos(int v, int tl, int tr, int pos){
- if (tl > tr){
- return 0;
- }
- if (tl == tr){
- return t[v];
- }
- int tm = (tl + tr) >> 1;
- push(v, tl, tr);
- if (pos <= tm){
- return get_pos(v << 1, tl, tm, pos);
- }
- else{
- return get_pos((v << 1) | 1, tm + 1, tr, pos);
- }
- }
- void solve_problem() {
- int n, q;
- cin >> n >> q;
- for (int i = 1; i <= n; i++){
- cin >> a[i];
- }
- for (int i = 1; i <= n; i++){
- cin >> b[i];
- }
- for (int i = 1; i <= q; i++){
- int type;
- cin >> type;
- if (type == 1){
- int x, y, k;
- cin >> x >> y >> k;
- update(1, 1, n, y, y + k - 1, x);
- }
- else{
- int pos;
- cin >> pos;
- int val = get_pos(1, 1, n, pos);
- if (val == 0){
- cout << b[pos] << "\n";
- }
- else{
- cout << a[val] << '\n';
- }
- }
- }
- return;
- }
- signed main () {
- IOS
- //freopen("sum.in", "r", stdin);
- //freopen("sum.out", "w", stdout);
- int tt = 1;
- //cin >> tt;
- while (tt--) {
- solve_problem();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment