Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pi;
- typedef vector<int> vi;
- const int MAXN = 300005;
- int n;
- int arr[MAXN];
- int st[4*MAXN];
- int marked[4*MAXN];
- void build(int v, int tl, int tr) {
- if (tl == tr) {
- st[v] = arr[tl];
- } else {
- int tm = (tl + tr) / 2;
- build(2*v, tl, tm);
- build(2*v+1, tm+1, tr);
- st[v] = st[2*v] + st[2*v+1];
- }
- }
- void push(int v) {
- if (marked[v]) {
- st[2*v] = st[2*v+1] = st[v];
- marked[2*v] = marked[2*v+1] = true;
- marked[v] = false;
- }
- }
- void update(int v, int tl, int tr, int l, int r, int new_val) {
- if (l > r) return;
- if (l == tl && tr == r) {
- st[v] = new_val;
- marked[v] = true;
- } else {
- push(v);
- int tm = (tl + tr) / 2;
- update(2*v, tl, tm, l, min(r, tm), new_val);
- update(2*v+1, tm+1, tr, max(l, tm+1), r, new_val);
- }
- }
- int getvalue(int v, int tl, int tr, int pos) {
- if (tl == tr) return st[v];
- push(v);
- int tm = (tl + tr) / 2;
- if (pos <= tm) {
- return getvalue(2*v, tl, tm, pos);
- } else {
- return getvalue(2*v+1, tm+1, tr, pos);
- }
- }
- void Main() {
- cout << "Enter N, the size of the array, and then N numbers\n";
- cin >> n;
- for (int i = 0; i < n; ++i) {
- cin >> arr[i];
- }
- build(1, 0, n-1);
- cout << "First type of query:\n";
- cout << "--> 1 p\n";
- cout << "--> Get the element at position p (0-indexed)\n";
- cout << "Second type of query:\n";
- cout << "--> 2 l r x\n";
- cout << "--> Update elements in range [l, r] to new value v\n";
- while (true) {
- int t;
- cin >> t;
- if (t == 1) {
- int p;
- cin >> p;
- cout << "arr[" << p << "] = " << getvalue(1, 0, n-1, p) << "\n";
- } else {
- int l, r, x;
- cin >> l >> r >> x;
- update(1, 0, n-1, l, r, x);
- }
- }
- }
- int main() {
- // ios::sync_with_stdio(false);
- // cin.tie(0);
- #ifdef _DEBUG
- // freopen("in.txt", "r", stdin);
- // freopen("out.txt", "w", stdout);
- #endif
- #ifndef _DEBUG
- #endif
- Main();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement