题目

二分好题

首先用二分找最小的绝对值差,对于每个a[i]都两个方向扫一遍,先都改成差满足的形式,然后再找a[k]等于0的情况,发现如果a[k]要变成0,则从他到左右两个方向上必会有两个连续的区间也随之变化,

然后我们有一点K, 使K点=0时,可以分别向左和右影响区间的值。并且影响之后的值一定互为以0为首项,绝对值差为公差的等差数列。

如在在一段范围内K点影响到的值,以后的点一定不会受到影响,然后修改的次数就是该范围的面积,可以用该区间的值的和减去影响影响范围的等差数列。最后用双指针法求出每个K的左右区间端点,枚举第一个符合条件的最小K即可求出答案

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define N 1001011
#define int long long
using namespace std;
int n, m, li, ri, ans, k, nk;
int data[N], a[N], def[N], sum[N], lef[N], rig[N];
bool check(int t)
{
int now = 0;
for (int i = 1; i <= n; i++)
a[i] = data[i];//a[i]是临时数组
for (int i = 2; i <= n; i++)
if (a[i] - a[i - 1] > t)//使a[i]减小一次,使a[i]满足条件,前后都扫一遍。
now += a[i] - a[i - 1] - t, a[i] = a[i - 1] + t;
if (now > m) return false;
for (int i = n - 1; i >= 1; i--)
if (a[i] - a[i + 1] > t)
now += a[i] - a[i + 1] - t, a[i] = a[i + 1] + t;
if (now > m) return false;
for (int i = 1; i <= n; i++)
sum[i] = sum[i - 1] + a[i];
int l = 1;
for (int r = 1; r <= n; r++)
{//找到左边最后一个受等差数列影响的
while (l < r && a[l] <= (r - l) * t) l++;//找左边最近的可以满足条件的位置,lef,rig存放的都是位置
lef[r] = l;
}
int r = n;
for (int l = n; l >= 1; l--)
{
while (r > l && a[r] <= (r - l) * t) r--;
rig[l] = r;
}
// for (int i = 1; i <= n; i++)
// printf("%lld %lld %lld\n", sum[i], lef[i], rig[i]);
for (int i = 1; i <= n; i++)
if ( (now+sum[rig[i]]-sum[lef[i]-1]-t*((i-lef[i])*(i-lef[i]+1)+(rig[i]-i)*(rig[i]-i+1))/2) <= m)//等差数列求和 + 原先的now <= m, 说明此时是最小的k
{nk = i;return true;}
return false;
}
signed main()
{
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%lld", &data[i]);
int mid = 0;
li = 0;
ri = 1e9;
while (li <= ri)
{
int mid = (li + ri) >> 1;
if (check(mid))
{
ans = mid;
ri = mid - 1;
}
else li = mid + 1;
}
printf("%lld %lld", nk, ans);
}
/*
16 7
8 7 6 5 5 5 3 5 5 6 6 7 7 9 7 5 5
*/

洛谷P3534 [POI2012] STU的更多相关文章

  1. 洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解题报告

    P3539 [POI2012]ROZ-Fibonacci Representation 题意:给一个数,问最少可以用几个斐波那契数加加减减凑出来 多组数据10 数据范围1e17 第一次瞬间yy出做法, ...

  2. 洛谷P3533 [POI2012]RAN-Rendezvous

    P3533 [POI2012]RAN-Rendezvous 题目描述 Byteasar is a ranger who works in the Arrow Cave - a famous rende ...

  3. BZOJ2801/洛谷P3544 [POI2012]BEZ-Minimalist Security(题目性质发掘+图的遍历+解不等式组)

    题面戳这 化下题面给的式子: \(z_u+z_v=p_u+p_v-b_{u,v}\) 发现\(p_u+p_v-b_{u,v}\)是确定的,所以只要确定了一个点\(i\)的权值\(x_i\),和它在同一 ...

  4. 洛谷P3538 [POI2012]OKR-A Horrible Poem [字符串hash]

    题目传送门 A Horrible Poem 题目描述 Bytie boy has to learn a fragment of a certain poem by heart. The poem, f ...

  5. 洛谷P3539 [POI2012] ROZ-Fibonacci Representation

    题目传送门 转载自:five20,转载请注明出处 本来看到这题,蒟蒻是真心没有把握的,还是five20大佬巨orz 首先由于斐波拉契数的前两项是1,1 ,所以易得对于任何整数必能写成多个斐波拉契数加减 ...

  6. 洛谷P3537 [POI2012]SZA-Cloakroom(背包)

    传送门 蠢了……还以为背包只能用来维护方案数呢……没想到背包这么神奇…… 我们用$dp[i]$表示当$c$的和为$i$时,所有的方案中使得最小的$b$最大时最小的$b$是多少 然后把所有的点按照$a$ ...

  7. 洛谷P3531 [POI2012]LIT-Letters

    题目描述 Little Johnny has a very long surname. Yet he is not the only such person in his milieu. As it ...

  8. 【洛谷3546_BZOJ2803】[POI2012]PRE-Prefixuffix(String Hash)

    Problem: 洛谷3546 Analysis: I gave up and saw other's solution when I had nearly thought of the method ...

  9. 洛谷 P1193 洛谷团队训练VS传统团队训练

    P1193 洛谷团队训练VS传统团队训练 题目背景 “在中学的信息学教育领域,洛谷无疑是一个相当受欢迎的辅助网站.同时有百余所学校正在通过洛谷进行信息学竞赛(以后简称OI)的教育.洛谷之所以如此受欢迎 ...

随机推荐

  1. Spring-Cloud之Sleuth链路追踪-8

    一.Spring Cloud Sleuth 是Spring Cloud 的一个组件,它的主要功能是在分布式系统中提供服务链路追踪的解决方案. 二.为什么需要Spring Cloud Sleuth? 微 ...

  2. 小程序加入echart 图表

    github上的地址 https://github.com/ecomfe/echarts-for-weixin 复制到当前项目根目录下 添加展示bar图表例子的文件夹 index.json 中配置使用 ...

  3. 已知IP地址算子网掩码

    子网掩码计算方法有两种: 方法一:利用子网数来计算: 1.首先,将子网数目从十进制数转化为二进制数: 2.接着,统计得到的二进制数的位数,设为N: 3.最后,先求出此IP地址对应的地址类别的子网掩码. ...

  4. 珠宝juelrye宝石

    juelrye n.珠宝 late 14c., juelrye "precious ornaments, jewel juelrye (uncountable) Adornment with ...

  5. 安装仪表盘控件Iocomp会遇到的几个常见问题

    相信从事HMI和自动化开发专业的小伙伴在使用工业仪表盘和图表控件时,都很熟悉怎么安装和操作Iocomp产品(毕竟它功能太强大了,基本人手一份的节奏),但是小编想肯定还是有很多和小编一样的入门的伙伴在安 ...

  6. Openlayers学习开始前序

    Openlayers将抽象事物具体化为类,其核心类是Map.Layers.Source.View,几乎所有的动作都是围绕这几个核心类展开.Map的实例就是内嵌于网页的交互式地图,因此,最关键的是Map ...

  7. Kubernetes集群开启Firewall

    关于端口的官方说明:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ k8s ...

  8. js 判断浏览器是pc端还是移动端

    if(/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) { //说明是移动端 } else { //说明是pc端 }

  9. Github 上 36 个最实用的 Vue 开源库

    任何一个开发者,都是十分喜欢使用开源软件包的.因为它使开发工作变得更快速.高效.容易.如果没有开源软件包,开发工作将变得疲惫不堪,不断的重复造轮子! 下面整理了 Github 上 36 个实用的 Vu ...

  10. MySQL/MariaDB数据库的冷备份和还原

    MySQL/MariaDB数据库的冷备份和还原 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL/MariaDB数据库的备份和还原概述 1>.为什么要备份 为了 ...