Submission #74756
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | #include<bits/stdc++.h> #define rep(i,a,n) for(long long i=a;i<n;i++) #define repp(i,a,n) for(long long i=a;i>=n;i--) #define so(z) sort(z.begin(),z.end()) #define sor(z) sort(z.rbegin(),z.rend()) #define re(z) reverse(z.begin(),z.end()) #define su(a) substr(a) #define sub(a,b) substr(a,b) #define yess cout<<"YES"<<nn #define noo cout<<"NO"<<nn #define yes cout<<"Yes"<<"\n" #define no cout<<"No"<<"\n" #define yesr cout<<"Yes"<<"\n";return(0) #define nor cout<<"No"<<"\n";return(0) #define fi first #define se second #define fr() front() #define mp make_pair #define pb push_back #define nn "\n" #define ll long long #define mod 1000000007 #define IM ll_MAX #define LM LONG_LONG_MAX #define gcd(x,y) __gcd(x,y) //最大公約数 #define lcm(x,y) x/(__gcd(x,y))*y //最小公倍数 #define prev(a) prev_permutation(a.begin(),a.end()) //辞書前 #define next(a) next_permutation(a.begin(),a.end()) //辞書後 #define get(s) getline(cin,s) // 空白の空いたstringの入力 #define fixed(a) fixed<<setprecision(a) //小数点何桁か指定 #define ro(a) round(a) //四捨五入 #define ce(a) ceil(a) //切り上げ #define up(a,v) upper_bound(a.begin(),a.end(),v) #define lo(a,v) lower_bound(a.begin(),a.end(),v) #define bi(a,v) binary_bound(a.begin(),a.end(),v) using namespace std; struct seg{ ll n,inf=30000,m_inf=-30000; vector<ll> v_sum; //区間和 vector<ll> v_min; //最小値 vector<ll> v_max; //最大値 //配列初期化 seg(ll size){ n=1; while (n<size){ n*=2; } v_sum.resize(n*2); v_min.resize(n*2); v_max.resize(n*2); for (ll i=0;i<n*2;i++){ v_sum[i]=0; v_min[i]=0; v_max[i]=0; } } //値の更新 void update(ll i,ll x){ i+=n-1; v_sum[i]=x; v_min[i]=x; v_max[i]=x; while (i>0){ i=(i-1)/2; v_sum[i]=v_sum[i*2+1]+v_sum[i*2+2]; v_min[i]=min(v_min[i*2+1],v_min[i*2+2]); v_max[i]=max(v_max[i*2+1],v_max[i*2+2]); } } //値の加算 void add(ll i,ll x){ i+=n-1; v_sum[i]+=x; v_min[i]+=x; v_max[i]+=x; while (i>0){ i=(i-1)/2; v_sum[i]=v_sum[i*2+1]+v_sum[i*2+2]; v_min[i]=min(v_min[i*2+1],v_min[i*2+2]); v_max[i]=max(v_max[i*2+1],v_max[i*2+2]); } } //最小値の取得 ll getMin(ll a,ll b){ return getlit(a,b,0,0,n); } ll getlit(ll a,ll b,ll i,ll l,ll r){ if (r<=a||b<=l){ //完全に範囲外 return inf; } else if (a<=l&&r<=b){ //完全に範囲内 return v_min[i]; } else { //一部区間が被る ll min_l=getlit(a,b,i*2+1,l,(l+r)/2); ll min_r=getlit(a,b,i*2+2,(l+r)/2,r); return min(min_l,min_r); } } //最大値の取得 ll getMax(ll a,ll b){ return getbig(a,b,0,0,n); } ll getbig(ll a,ll b,ll i,ll l,ll r){ if (r<=a||b<=l){ return m_inf; } else if (a<=l&&r<=b){ return v_max[i]; } else { ll max_l=getbig(a,b,i*2+1,l,(l+r)/2); ll max_r=getbig(a,b,i*2+2,(l+r)/2,r); return max(max_l,max_r); } } //合計値(区間和)の取得 ll getSum(ll a,ll b){ return gettot(a,b,0,0,n); } ll gettot(ll a,ll b,ll i,ll l,ll r){ if (r<=a||b<=l){ return 0; } else if (a<=l&&r<=b){ return v_sum[i]; } else { ll sum_l=gettot(a,b,i*2+1,l,(l+r)/2); ll sum_r=gettot(a,b,i*2+2,(l+r)/2,r); return sum_l+sum_r; } } //出力用コード(最大値ver.) void out(ll size){ for (ll i=n-1;i<size+n;i++){ cout<<v_sum[i]<< " " ; } cout<< "\n" ; } }; int main(){ cin.tie(NULL); ios::sync_with_stdio( false ); ll n; cin>>n; string s; seg st(n); rep(i,0,n){ ll a; cin>>a; st.update(i,a); } while (cin>>s){ if (s== "exit" ) return (0); ll a,b; cin>>a>>b; if (s== "update" ) st.update(a,b); else cout<<st.getMin(a,b+1)<<nn; } //st.out(n); return (0); } |
ステータス
項目 | データ |
---|---|
問題 | 0459 - セグメントツリー練習 |
ユーザー名 | r2201 |
投稿日時 | 2023-07-21 15:25:40 |
言語 | C++17 |
状態 | Accepted |
得点 | 10 |
ソースコード長 | 4450 Byte |
最大実行時間 | 56 ms |
最大メモリ使用量 | 7312 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 10 / 10 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
Input01 | AC | 29 ms | 476 KB |
1
|
Input02 | AC | 27 ms | 432 KB |
1
|
Input03 | AC | 24 ms | 508 KB |
1
|
Input04 | AC | 18 ms | 592 KB |
1
|
Input05 | AC | 20 ms | 544 KB |
1
|
Input06 | AC | 21 ms | 616 KB |
1
|
Input07 | AC | 22 ms | 552 KB |
1
|
Input08 | AC | 32 ms | 604 KB |
1
|
Input09 | AC | 26 ms | 976 KB |
1
|
Input10 | AC | 56 ms | 7312 KB |
1
|