Description

公元20XX年,人类与外星人之间的大战终于爆发。

现有一个人类军团,由n名士兵组成,第i个士兵的战斗力值对应一个非负整数ai (1 \leq i \leq n1≤in)。

有一天,某个战力爆表的外星人NaN单独向地球人宣战,已知它的战力值为k (1 \leq k \leq 1e131≤k≤1e13)。现在该军团指挥官决定派遣编号在某个区间(l,r)内的士兵去与敌方决斗。由于对手的不一般,现规定一个奇怪的战力值计算公式:f(l,r)=[max(l,r)-min(l,r)]*(r-l+1)f(l,r)=[max(l,r)−min(l,r)]∗(rl+1),(1 \leq l < r \leq n)(1≤l<rn)。

即只有当f(l,r) \geq kf(l,r)≥k时才能战胜敌人。请聪明的你来计算至少需要派出多少名士兵才能战胜敌人。

Input

第一行输入两个整数nn,kk,(1 \leq n \leq 2e5,1 \leq k \leq 1e131≤n≤2e5,1≤k≤1e13),分别代表军团士兵个数和敌人战力值;第二行输入nn个整数,表示第i(1\leq i \leq n)i(1≤in)名士兵的战力值(0 \leq ai \leq 1e9)(0≤ai≤1e9)。

Output

答案输出一个正整数表示应派出士兵的数量,如果不存在则输出-1−1。

输出时每行末尾的多余空格,不影响答案正确性

样例输入复制

5 3
1 2 3 4 5

样例输出复制

3

解题报告:

AC代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll MAX = 2e5 + 5;
int n;
ll a[MAX],k;
struct TREE {int l,r;ll val,maxx,minn;
} tree[MAX * 4];
void pushup(int cur) {tree[cur].val = tree[cur*2].val + tree[cur*2+1].val;tree[cur].maxx = max(tree[cur*2].maxx , tree[cur*2+1].maxx);tree[cur].minn = min(tree[cur*2].minn , tree[cur*2+1].minn);
}
void build(int l,int r,int cur) {tree[cur].l=l;tree[cur].r=r;if(l == r) {tree[cur].val = tree[cur].maxx = tree[cur].minn = a[l];return ;}int m = (l+r)/2;build(l,m,cur*2);build(m+1,r,cur*2+1);pushup(cur);
}
ll querymax(int pl,int pr,int cur) {if(pl <= tree[cur].l && pr >= tree[cur].r) return tree[cur].maxx;ll res = 0;if(pl <= tree[cur*2].r) res = max(res,querymax(pl,pr,cur*2));if(pr >= tree[cur*2+1].l) res = max(res,querymax(pl,pr,cur*2+1));return res;
}
ll querymin(int pl,int pr,int cur) {if(pl <= tree[cur].l && pr >= tree[cur].r) return tree[cur].minn;ll res = LLONG_MAX;if(pl <= tree[cur*2].r) res = min(res,querymin(pl,pr,cur*2));if(pr >= tree[cur*2+1].l) res = min(res,querymin(pl,pr,cur*2+1));return res;
}
bool fit(int x) {for(int i = 1; i<=n-x+1; i++) {if((querymax(i,i+x-1,1) - querymin(i,i+x-1,1)) * x >= k) return 1;}return 0 ;
}int main()
{cin>>n>>k;for(int i = 1; i<=n; i++) cin>>a[i];build(1,n,1);int l = 0;int r = n;int mid = (l+r)/2;while(l<r) {mid = (l+r)/2;if(fit(mid)) r=mid;else l=mid+1;}printf("%d\n",l);return 0 ;} 

jsk Star War (线段树维护区间最小最大值 + 二分)相关推荐

  1. Can you answer these queries I SPOJ - GSS1 (线段树维护区间连续最大值/最大连续子段和)...

    You are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A query is defi ...

  2. 线段树维护区间最大值+第 45 届(ICPC)亚洲区域赛(昆明)L题Simone and Graph Coloring

    题意: 给你n个数的序列,当满足i<ji<ji<j andandand ai>aja_i>a_jai​>aj​时,这两个点之间有一条边,现在对点染色,要求每个点相邻 ...

  3. Codeforces Round #742 (Div. 2) E. Non-Decreasing Dilemma (线段树维护区间连续问题)

    题意: 操作1:把x位置的数字修改成y. 操作2:查询[l,r]之间不下降序列的个数. 题解: 线段树维护区间和问题 (这是套路,想不到只能说做题少别打我) . 用五个变量进行维护. sum区间总个数 ...

  4. Can you answer these queries V SPOJ - GSS5 (分类讨论+线段树维护区间最大子段和)

    recursion有一个整数序列a[n].现在recursion有m次询问,每次她想知道Max { A[i]+A[i+1]+...+A[j] ; x1 <= i <= y1 , x2 &l ...

  5. BZOJ1018 | SHOI2008-堵塞的交通traffic——线段树维护区间连通性+细节

    [题目描述] BZOJ1018 | SHOI2008-堵塞的交通traffic 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常奇特,整个国家的交通系统可 以被看成是一个2行C列 ...

  6. BZOJ-4811: [Ynoi2017]由乃的OJ (树链剖分 线段树维护区间操作值 好题)

    4811: [Ynoi2017]由乃的OJ Time Limit: 6 Sec  Memory Limit: 256 MB Submit: 366  Solved: 118 [Submit][Stat ...

  7. 【线段树-维护区间最小值和区间和】2021 ICPC网络赛第一场 D: Edge of Taixuan

    Problem D: Edge of Taixuan 评测传送门 (ps: 评测时需要先花费一个币买下题目集后方可进行提交并评测.) 题目大意: 给出 n n n个结点, m m m次操作,每次操作给 ...

  8. E. Sign on Fence(整体二分 + 线段树维护区间最大连续 1 的个数)

    E. Sign on Fence 给定一个长度为nnn的数组aaa,1≤ai≤1091 \leq a_i \leq 10 ^ 91≤ai​≤109,有mmm次询问,每次给定l,r,kl, r, kl, ...

  9. 【GDKOI2016Day1T1-魔卡少女】【拆位】线段树维护区间内所有连续子区间的异或和...

    题意:给出N个数,M个操作.操作有修改和询问两种,每次修改将一个数改成另一个数,每次询问一个区间的所有连续子区间的异或和.n,m<=100000,ai<=1000 题解: 当年(其实也就是 ...

最新文章

  1. 解决AndroidStudio导入项目卡在gradle加载界面
  2. android应用案例开发大全_vue.js入门及经典应用案例总结(前端开发必看)
  3. R语言基础入门(6)之向量下标和子集
  4. 图片服务 - thumbor启用检测器
  5. volatile是Java提供的一种轻量级的同步机制
  6. java 图片生成器_Java实现的图片生成器
  7. 安卓gridview条目点击事件_敬业签的安卓手机版设置便签按正序排序教程
  8. Introducing and integrating Hibernate(Chapter 2 of Hibernate In Action)
  9. 战神CPU计算机硬件组装
  10. 虎牙服务器升级维护中 请留意公告,魔渊之刃像素危城系列活动上线-更新公告1月21日...
  11. 热式气体质量流量计检定规程_新品发布:西尼尔ST51/54热式质量流量计
  12. CentOS查找redis配置文件及防火墙相关命令
  13. SecureCRT8.1下载+注册机+破解教程
  14. 信号反射问题与相关电路设计技巧
  15. 通过qmh启动qt应用
  16. python数据结构题目_python数据结构_递归python数据结构_python数据结构 面试题 - 云+社区 - 腾讯云...
  17. RabbitMQ 工作模式二
  18. 数字图像处理及matlab实现第三版相关概念总结
  19. [资源]C++ 程序员必收藏
  20. Conflux人物志-伍鸣博士:好奇心是我探索未知世界的动力

热门文章

  1. Sudoku Extension UVALive - 4763
  2. 计算机怎样辅助英语听力教学方法有哪些,计算机辅助教学在英语听力中的运用.doc...
  3. 计算机excel知识点一级,2012年计算机一级考试高分必看知识点:EXCEL
  4. linux 文件按时间 函数,[Linux文件属性]使用utime函数操作文件的时间参数
  5. STM32实现USB虚拟串口原理(下)
  6. DOM Element对象的offsetXXX方法
  7. springdatajpa命名规则_Spring Boot 之Spring data JPA简介
  8. sdk是什么_人脸识别在美颜SDK中存在什么意义?
  9. js for循环_JS 函数的执行时机(深入理解6个6)
  10. android 主线程调用,Android 主线程和线程之间相互发送消息