結果
問題 | No.1234 典型RMQ |
ユーザー |
![]() |
提出日時 | 2017-04-26 23:50:31 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 275 ms / 2,000 ms |
コード長 | 1,163 bytes |
コンパイル時間 | 1,510 ms |
コンパイル使用メモリ | 159,868 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-09 01:41:14 |
合計ジャッジ時間 | 9,845 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include <bits/stdc++.h>#define rep(i,N) for(int i=0;i<N;i++)using namespace std;typedef long long ll;constexpr ll ten(int n){return n==0?1:10*ten(n-1);}const int B=350;const ll MX=ten(15);int n,q;ll val[B][B],ad[B],mi[B];void push(int i){ll ma=ten(18);rep(j,B)if(i*B+j<n)ma=min(ma,val[i][j]);mi[i]=ma;}void add(int l,int r,int x){int lx=l/B,ly=l%B,rx=r/B,ry=r%B;if(lx!=rx){for(;ly<B;ly++)val[lx][ly]+=x;push(lx);lx++;ly=0;for(;lx<rx;lx++)ad[lx]+=x;}for(;ly<ry;ly++)val[rx][ly]+=x;push(rx);}ll get(int l,int r){int lx=l/B,ly=l%B,rx=r/B,ry=r%B;ll v=ten(18);if(lx!=rx){for(;ly<B;ly++)v=min(v,val[lx][ly]+ad[lx]);lx++;ly=0;for(;lx<rx;lx++)v=min(v,mi[lx]+ad[lx]);}for(;ly<ry;ly++)v=min(v,val[rx][ly]+ad[rx]);return v;}int main(){cin>>n;assert(1<=n&&n<=ten(5));rep(i,n){ll x;cin>>x;assert(-ten(10)<=x&&x<=ten(10));val[i/B][i%B]=x;}rep(i,B)push(i);cin>>q;assert(1<=q&&q<=ten(5));rep(i,q){int k,l,r,c;cin>>k>>l>>r>>c;assert(k==1||k==2);assert(1<=l&&l<=r&&r<=n);assert(-ten(4)<=c&&c<=ten(4));l--;if(k==1)add(l,r,c);else cout<<get(l,r)<<endl;}}