循環配列での長さwの区間の和の最小値

循環させる前の配列と長さWを入れる


    long long rmax(vector<int> v,long long w){
        int n = v.size();
        rep(i,n)v.push_back(v[i]);
        n *= 2;
        if(w >= n/2){
            long long ans = 0;
            rep(i,n/2)ans += v[i];
            return ans;
        }
        long long sum = 0;
        rep(i,w)sum += v[i];
        long long ans = sum;
        for(long long i = 0;i < n/2-1;i++){
            sum -= v[i];
            sum += v[i+w];
            ans = min(ans,sum);
        }
        return ans;
    }