Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// In the Name of God
- #include <bits/stdc++.h>
- #define pb push_back
- #define F first
- #define S second
- #define sq(x) (x) * (x)
- #define ins insert
- #define M_P make_pair
- #define sz size
- #define all(x) x.begin(),x.end()
- #define Speed ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
- #define er erase
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef pair < int, int > pii;
- typedef pair < ll, ll > pll;
- typedef pair < ll, int > pli;
- typedef pair < int , ll > pil;
- typedef pair < string, string > pss;
- typedef pair < char, int > pci;
- typedef pair < char, ll > pcl;
- typedef pair < string, int > psi;
- typedef pair < string, ll > psl;
- typedef pair < double, double > pdd;
- const int N = 222222, mod = 1e9 + 7;
- const ll INF = 2e18;
- ll n, a[N], t[N * 4], m, z[N * 4];
- inline void push (ll v, ll l, ll r) {
- if (z[v]) {
- if (l != r) {
- t[v + v] += z[v];
- t[v + v + 1] += z[v];
- z[v + v] += z[v];
- z[v + v + 1] += z[v];
- }
- z[v] = 0;
- }
- }
- inline void build (ll v, ll l, ll r) {
- if (l == r) {
- t[v] = a[l];
- return;
- }
- ll md = l + ((r - l) >> 1);
- build (v + v, l, md);
- build (v + v + 1, md + 1, r);
- t[v] = min (t[v + v + 1], t[v + v]);
- }
- inline void updLR (ll v, ll l, ll r, ll left, ll right, ll val) {
- push (v, l, r);
- if (left > r || right < l) {
- return;
- }
- if (left <= l && right >= r) {
- t[v] += val;
- z[v] += val;
- push(v, l, r);
- return;
- }
- push(v, l, r);
- ll md = l + ((r - l) >> 1);
- updLR(v + v, l, md, left, right, val);
- updLR(v + v + 1, md + 1, r, left, right, val);
- t[v] = min (t[v + v], t[v + v + 1]);
- }
- inline ll get (ll v, ll l, ll r, ll left, ll right) {
- push(v, l, r);
- if (left > r || right < l) {
- return INF;
- }
- if (left <= l && right >= r) {
- push(v, l, r);
- return t[v];
- }
- push(v, l, r);
- ll md = l + ((r - l) >> 1);
- return min (get(v + v, l, md, left, right), get(v + v + 1, md + 1, r, left, right));
- }
- int main() {
- freopen ("in.txt", "r", stdin);
- freopen ("out.txt", "w", stdout);
- Speed;
- cin >> n;
- for (ll i = 1; i <= n; ++i) {
- cin >> a[i];
- }
- build (1, 1, n);
- cin >> m;
- while (m--) {
- ll x, val = 1e7, l, r;
- while (cin >> x) {
- static int ct = 0;
- ++ct;
- if (ct == 1) {
- l = x;
- }
- if (ct == 2) {
- r = x;
- }
- if (ct == 3) {
- val = x;
- }
- }
- ++l;
- ++r;
- if (val == 1e7) {
- if (l == r) {
- cout << a[l] << "\n";
- continue;
- }
- if (l < r) {
- cout << get (1, 1, n, l, r) << "\n";
- continue;
- }
- cout << min (get (1, 1, n, l, n), get(1, 1, n, 1, r)) << "\n";
- continue;
- }
- if (l <= r) {
- updLR(1, 1, n, l, r, val);
- continue;
- }
- updLR(1, 1, n, l, n, val);
- updLR(1, 1, n, 1, r, val);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement