洛谷P3534 [POI2012] STU
二分好题
首先用二分找最小的绝对值差,对于每个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的更多相关文章
- 洛谷 P3539 [POI2012]ROZ-Fibonacci Representation 解题报告
P3539 [POI2012]ROZ-Fibonacci Representation 题意:给一个数,问最少可以用几个斐波那契数加加减减凑出来 多组数据10 数据范围1e17 第一次瞬间yy出做法, ...
- 洛谷P3533 [POI2012]RAN-Rendezvous
P3533 [POI2012]RAN-Rendezvous 题目描述 Byteasar is a ranger who works in the Arrow Cave - a famous rende ...
- 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\),和它在同一 ...
- 洛谷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 ...
- 洛谷P3539 [POI2012] ROZ-Fibonacci Representation
题目传送门 转载自:five20,转载请注明出处 本来看到这题,蒟蒻是真心没有把握的,还是five20大佬巨orz 首先由于斐波拉契数的前两项是1,1 ,所以易得对于任何整数必能写成多个斐波拉契数加减 ...
- 洛谷P3537 [POI2012]SZA-Cloakroom(背包)
传送门 蠢了……还以为背包只能用来维护方案数呢……没想到背包这么神奇…… 我们用$dp[i]$表示当$c$的和为$i$时,所有的方案中使得最小的$b$最大时最小的$b$是多少 然后把所有的点按照$a$ ...
- 洛谷P3531 [POI2012]LIT-Letters
题目描述 Little Johnny has a very long surname. Yet he is not the only such person in his milieu. As it ...
- 【洛谷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 ...
- 洛谷 P1193 洛谷团队训练VS传统团队训练
P1193 洛谷团队训练VS传统团队训练 题目背景 “在中学的信息学教育领域,洛谷无疑是一个相当受欢迎的辅助网站.同时有百余所学校正在通过洛谷进行信息学竞赛(以后简称OI)的教育.洛谷之所以如此受欢迎 ...
随机推荐
- 2019 昆仑万维java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.昆仑万维等公司offer,岗位是Java后端开发,因为发展原因最终选择去了昆仑万维,入职一年时间了,也成为了面 ...
- 神奇的外部嵌套(使用ROW_NUMBER()查询带条件的时候提示列名无效)
declare @pageIndex int -- 第几页 declare @pageSize int -- 每页包含的记录数 --这里注意一下,不能直接把变量放在这里,要用select select ...
- 【转载】C#中List集合使用Contains方法判断是否包含某个对象
在C#的List集合中,如果要查找List集合是否包含某一个值或者对象,如果不使用List集合类的扩展方法的话一般会使用for循环或者foreach遍历来查找,其实List集合类中的扩展方法Conta ...
- js 将数字转换成中文大写
//完成将 toChineseNum, 可以将数字转换成中文大写的表示,处理到万级别,例如 toChineseNum(12345),返回 一万二千三百四十五. const toChinesNum = ...
- 四级CET大学词汇六级备份
Cet6六级中要考到法庭词汇的小故事 如何安排六级考试前的一个月1.每天按照我的要求去背单词2.做四套真题,词汇部分 只做词汇 3.做personal dictionary把真题中出现的所有不认识的 ...
- Linux“七大蠢”收录
这个系列的文章,前段时间在微信公共平台(阿里技术嘉年华)上看过,写得很好. Linux"七大蠢"之一:万般皆文本 Linux"七大蠢"之二:处处有脚本 Linu ...
- github-git clone 下载很慢的问题解决
git clone下载很慢的问题: 下载到指定目录:git clone https://github.com/ChengWuOne/spring-cloud-demo.git D:/日常软件/GitH ...
- gitlab中clone项目时,IP地址是一串数字
问题:docker安装后,clone显示ip是一串地址 解决(如果是非docker启动的,自然就是进入gitlab下): 1.进入docker 后台: docker exec -it gitlab / ...
- JMeter性能测试,入门
原文转自:https://blog.csdn.net/lovesoo/article/details/78579547 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件 ...
- centos7修改IP地址(静态)
环境如下: 操作系统: CentOS-7-x86_64-DVD-1908.iso 步骤如下: 1. 查看网卡信息 ip a 2.编辑对应网卡的配置文件,我这里网卡是ens33,所以我修改的是文件 i ...