#include<iostream> #include<vector> #include<algorithm> using namespace std; int M, N; int main(){ cin >> M >> N; vector<int> temp; ; i < M; i++){ int n; cin >> n; ){ ] + n <= N){ temp[temp.size() - ] += n;
传送门 思路: 求数列每段和的最大值的最小值,很明显是用二分法求解,加贪心检验.本题关键是要怎么去高效的check,可以考虑一个贪心的思路,能加的就加上,不能则新开一段,so对于二分的值 u ,我们从数列 sum 从前往后扫,如果 tot 大于了 u ,我们不加而是 tot 重新赋值并且 cnt++ ,最后只需判断 cnt 是否不小于 m 就行了.这样判断与前缀和一样是O(n)的复杂度,但是节省了空间且容易思考. 标程: #include<iostream> #include<algor