Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //КСС
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- #include <set>
- #include <stack>
- #include <iterator>
- #include <stdio.h>
- #include <string>
- #include <queue>
- #include <unordered_set>
- #include <unordered_map>
- #include <map>
- #include <ctime>
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- vector<int> tree;
- vector<int> add;
- void push(int id, int curl, int curr) {
- if(add[id] == 1e9) {
- return;
- }
- if(curl == curr) {
- tree[id] = add[id];
- add[id] = 1e9;
- return;
- }
- add[id*2] = add[id];
- add[id*2+1] = add[id];
- add[id] = 1e9;
- }
- void setLR(int id, int curl, int curr, int l, int r, int val) {
- push(id, curl, curr);
- if( curr < l || curl > r) {
- return;
- }
- if(curl >= l && curr <= r) {
- add[id] = val;
- push(id, curl, curr);
- return;
- }
- int m = (curl + curr)/2;
- setLR(2*id, curl, m, l, r, val);
- setLR(2*id+1, m+1, curr, l, r, val);
- }
- void updateForStart(int id, int curl, int curr, int x, int val) {
- if(curr < x|| curl > x) {
- return;
- }
- if(curl == x && curl == curr) {
- tree[id] = val;
- return;
- }
- int m = (curl+curr)/2;
- updateForStart(id*2, curl, m, x, val);
- updateForStart(id*2+1, m+1, curr, x, val);
- }
- int gett(int id, int curl, int curr, int x) {
- push(id, curl, curr);
- if(curr < x|| curl > x) {
- return -1;
- }
- if(curl == x && curl == curr) {
- return tree[id];
- }
- int m = (curl+curr)/2;
- if(x >= curl && x <= m) {
- return gett(id*2, curl, m, x);
- } else {
- return gett(id*2+1, m+1, curr, x);
- }
- }
- int main() {
- cin.tie(0);
- cout.tie(0);
- ios_base::sync_with_stdio(false);
- int n;
- cin >> n;
- tree.resize(4*n);
- add.assign(4*n, 1e9);
- for(int i = 0; i < n; i++) {
- int a;
- cin >> a;
- updateForStart(1, 0, n-1, i, a);
- }
- int m;
- cin >> m;
- vector<int> ans;
- for(int i = 0; i < m; i++) {
- string s;
- cin >> s;
- if(s == "g") {
- int x;
- cin >> x;
- x--;
- ans.push_back(gett(1, 0, n-1, x));
- } else {
- int l, r, val;
- cin >> l >> r >> val;
- l--;
- r--;
- setLR(1, 0, n-1, l, r, val);
- }
- }
- for(int i = 0; i < ans.size(); i++) {
- cout << ans[i] << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement