公式
B - 農場の区画分け / Farm Partitioning 解説
by
B - 農場の区画分け / Farm Partitioning 解説
by
MtSaka
各区画の生産力を計算し、その最大値と最小値の差を求めればよいです。 制約より、\(M\) 個の区画は畑 \(1\) から畑 \(N\) までを重複なく過不足なく分割します。そのため、区画の長さの合計は \(N\) です。
よって、各区画について愚直にその生産力を計算しても全体で時間計算量 \(\mathrm{O}(N)\) しかかかりません。
よって、全体で\(\mathrm{O}(N+M)\) で解くことができます。
実装例(C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> a(n);
for (auto& e : a) cin >> e;
long long ma = 0, mi = 1e18;
for (int i = 0; i < m; ++i) {
int l, r;
cin >> l >> r;
l--;
long long sum = 0;
for (int i = l; i < r; ++i) sum += a[i];
ma = max(ma, sum);
mi = min(mi, sum);
}
cout << ma - mi << endl;
}
投稿日時:
最終更新:
