[白俊]1659号は区間と4を求めます


白駿11659号区間求和4題
問題の説明
n個の
  • の数が与えられた場合、iからjまでの和を求めるプログラムを作成してください.
  • 問題を見る考え
  • デュアルポインタ
  • 区間が与えられるたびに計算が行われ、効率的ではないようだ.
  • 0からiまでのすべての和を
  • arrSumベクトルに保存します.では、arrSum[j] - arr[i]は区間和になります.
  • プールの概要
  • 0~iストレージおよびvector<unsigned long long> arrSum
  • 要求
  • iからjまでの区間和は、arrSum[j] - arrSum[i-1]を出力すればよい.
  • コード#コード#
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    typedef unsigned long long ull;
    
    vector<ull> arrSum;
    int M;
    
    void getInput(){
      int N; cin >> N;
      cin >> M;
      ull sumCnt = 0;
      arrSum.push_back(0);
      for(int i=0; i<N; ++i){
        int temp; cin >> temp;
        sumCnt += temp;
        arrSum.push_back(sumCnt);
      }
    }
    
    ull calSum(){
      int lp, rp; cin >> lp >> rp;
      --lp;
      
      return arrSum[rp] - arrSum[lp];
    }
    
    void solve(){
      getInput();
      for(int i=0; i<M; ++i){
        cout << calSum() << "\n";
      }
    }
    
    int main(){
      ios::sync_with_stdio(false);
      cin.tie(0);
      solve();
    
      return 0;
    }
    ポスト
  • ダブルポインタの問題を解くことができれば、もっと良い答えがあるようです.