結果
問題 | No.1234 典型RMQ |
ユーザー |
![]() |
提出日時 | 2020-09-18 22:41:46 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 315 ms / 2,000 ms |
コード長 | 2,151 bytes |
コンパイル時間 | 2,880 ms |
コンパイル使用メモリ | 192,156 KB |
実行使用メモリ | 8,960 KB |
最終ジャッジ日時 | 2024-11-09 02:00:16 |
合計ジャッジ時間 | 10,480 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#pragma GCC optimize("O3")#include <bits/stdc++.h>#define ll long long#define rep(i,n) for(ll i=0;i<(n);i++)#define pll pair<ll,ll>#define pii pair<int,int>#define pq priority_queue#define pb push_back#define eb emplace_back#define fi first#define se second#define endl '\n'#define ios ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);#define lb(c,x) distance(c.begin(),lower_bound(all(c),x))#define ub(c,x) distance(c.begin(),upper_bound(all(c),x))using namespace std;const ll INF=1e18;struct LazySegmentTree{private:ll n;vector<ll> node, lazy;public:LazySegmentTree(vector<ll> v){ll sz=(ll)v.size();n=1;while(n<sz) n*=2;node.resize(2*n-1);lazy.resize(2*n-1,0);rep(i,sz) node[i+n-1]=v[i];for(ll i=n-2;i>=0;i--) node[i]=min(node[2*i+1],node[2*i+2]);}void eval(ll k,ll l,ll r){if(lazy[k]!=0){node[k]+=lazy[k];if(r-l>1){lazy[2*k+1]+=lazy[k];lazy[2*k+2]+=lazy[k];}lazy[k]=0;}}void add(ll a,ll b,ll x,ll k=0,ll l=0,ll r=-1){if(r<0) r=n;eval(k,l,r);if(b<=l || r<=a) return;if(a<=l && r<=b){lazy[k]+=x;eval(k,l,r);}else{add(a,b,x,2*k+1,l,(l+r)/2);add(a,b,x,2*k+2,(l+r)/2,r);node[k]=min(node[2*k+1],node[2*k+2]);}}ll getmin(ll a,ll b,ll k=0,ll l=0,ll r=-1){if(r<0) r=n;if(b<=l || r<=a) return INF;eval(k,l,r);if(a<=l && r<=b) return node[k];ll vl=getmin(a,b,2*k+1,l,(l+r)/2);ll vr=getmin(a,b,2*k+2,(l+r)/2,r);return min(vl,vr);}};int main(){ll n;cin >> n;vector<ll> a(n);rep(i,n){cin >> a[i];}LazySegmentTree seg=LazySegmentTree(a);ll q;cin >> q;rep(i,q){ll k,l,r,c;cin >> k >> l >> r >> c;l--;if(k==1){seg.add(l,r,c);}else{cout << seg.getmin(l,r) << endl;}}return 0;}