首页 > 其他分享 >洛谷题单指南-二分查找与二分答案-P1182 数列分段 Section II

洛谷题单指南-二分查找与二分答案-P1182 数列分段 Section II

时间:2024-03-02 21:34:53浏览次数:19  
标签:二分 maxx 分段 int 洛谷题 Section 每段 最大值

原题链接:https://www.luogu.com.cn/problem/P1182

题意解读:每段和的最大值越小,则分段数就越多,因此可以通过给定每段和的最大值,将分段数划分为两类:<=M,>M,对每段和的最大值进行二分即可。

解题思路:

二分的判定条件为,给定每段和的最大值,计算分段数,计算逻辑如下:

依次遍历每一个数,求当前数到开始数的区间和,

如果区间和大于每段和的最大值,则区间数+1,且当前数作为下一个区间的开始数

最终统计得到区间数,如果区间数<=M,说明符合条件,每段和的最大值可以往更小的进行探索,否则往更大的探索

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 100005;

int a[N], n, m, ans;
long long s[N];

bool check(int x)
{
    int i = 1, last = 1, cnt = 1;
    while(i <= n)
    {
        if(s[i] - s[last - 1] > x)
        {
            last = i;
            cnt++;
        }
        i++;
    }
    return cnt <= m; //分段小于等于m,可以试探分段更多,分段越多,即最大分段和更小
}

int main()
{
    cin >> n >> m;
    int maxx = 0;
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
        s[i] = s[i - 1] + a[i]; //s是前缀和数组
        maxx = max(maxx, a[i]); //记录最大值
    }

    int l = maxx, r = 1e9; //左边界至少是其中最大的数,即如果每个数一个分段,这时最大的分段和最小,为数列的最大数
    while(l <= r)
    {
        int mid = (l + r) >> 1;
        if(check(mid)) ans = mid, r = mid - 1;
        else l = mid + 1;
    }
    cout << ans;

    return 0;
}

 

标签:二分,maxx,分段,int,洛谷题,Section,每段,最大值
From: https://www.cnblogs.com/jcwy/p/18049262

相关文章

  • st表二分按位与_cf900_E. Iva & Pav
    目录题目概述思路想法参考代码做题反思题目概述原题参考:E.Iva&Pav给出长度为n的数组和m次询问,每次询问包括一个左区间l和一个整数k,要求给出最大的右区间的值使得al&al+1&...&ar>=k思路想法其实对二进制的几种运算随意看一下,可以发现:随着长度的增加,按位与的结果是保......
  • 2024AcWing蓝桥杯集训·每日一题-二分
    1.[AcWing503.借教室]题目描述在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来\(n\)天......
  • 二分查找
       int范围有限,当数据量大的时候容易导致结出现负数>>>右移运算符相当于把二进制除与二后取整防止数据过大出现负数适用于更多的编程语言  符合逻辑,方便阅读 改进的地方:右指针不指向需要查找的数,只需确认左指针指向的数是不是要查找的数 ......
  • 洛谷题单指南-二分查找与二分答案-P3853 [TJOI2007] 路标设置
    原题链接:https://www.luogu.com.cn/problem/P3853题意解读:相邻路标的最大距离即空旷指数,空旷指数越小,用的路标越多,因此可以根据空旷指数将使用路标情况分成两类:路标数<=K,路标数>K,对空旷指数进行二分即可。解题思路:二分的判定条件为,给定空旷指数,计算需要的路标数只需遍历每两......
  • 洛谷题单指南-二分查找与二分答案-P2678 [NOIP2015 提高组] 跳石头
    原题链接:https://www.luogu.com.cn/problem/P2678题意解读:最短跳跃距离越大,要移走的石头就越多,因此可以根据最短跳跃距离的不同把情况分为两类:移走的石头数<=M、移走的石头数>M,对最短跳跃距离二分即可。解题思路:二分的判定条件如下:对于给定最短跳跃距离,需要计算移走的石头数,......
  • 【STL】二分搜索的实现与stl标准库的应用
    在算法题中经常会出现搜索的题目,如果使用暴力搜索在数据量较大时会超时,(如\(10^5\)数量级时\(O(n^2)\)就会超时,\(O(nlogn)\)则通常不会),因此常用二分搜索等进行优化。虽然stl库中关于二分搜索的接口很好用,很适合区间二分搜索,但我们仍需掌握C++实现二分搜索,“虽然这是一个简单的算法......
  • 洛谷题单指南-二分查找与二分答案-P2440 木材加工
    原题链接:https://www.luogu.com.cn/problem/P2440题意解读:切出来的长度越短,则段数越多,可以通过二分长度来解决。解题思路:二分的关键在于判定条件,此题就是对二分到的长度计算可以切割的段数,如果段数大于等于k,则满足要求,可以继续加大长度。注意点:1、计算切割出来的段数是累加:每......
  • 整数二分算法(自用)
    1.思想对于一个已排序数组,找到一个点,使得数组被分为两部分,即此点左部和右部(点在左部或右部中的一个),比如数组中小于等于某数x的部分与大于的部分;对于整数二分而言两个范围之间是没有空隙的,即左部分的边界x的下一个数一定在右部分。我们可以根据题目选择多种方法二分数组,大类上分......
  • 二分
    二分查找模板总结二分查找是一种在有序数组中查找某一特定元素的搜索算法。元素集合有顺序,元素性质有分界点,二分法就可以用来求分界点,并不一定要求集合中元素是不重复的。算法思路:假设目标值在闭区间[left,right]中,每次将区间长度缩小一半,当left=right时,我们就找到了......
  • 洛谷题单指南-二分查找与二分答案-P1678 烦恼的高考志愿
    原题链接:https://www.luogu.com.cn/problem/P1678题意解读:要计算不满意度之和的最小值,就要保证每个人的不满意度最小,即选择的学校录取分数-学生分数之差的绝对值最小。解题思路:如何在学校录取分数中找与学生分数最接近的呢?有三种可能:1、学生分数在录取分数中存在相等的2、学......