【牛客 - 82B】区间的连续段(贪心,建图,倍增)
题干:
链接:https://ac.nowcoder.com/acm/contest/82/B
来源:牛客网
给你一个长为n的序列a和一个常数k
有m次询问,每次查询一个区间[l,r]内所有数最少分成多少个连续段,使得每段的和都 <= k
如果这一次查询无解,输出"Chtholly"
输入描述:
第一行三个数n,m,k
第二行n个数表示这个序列a
之后m行,每行给出两个数l r表示一次询问
输出描述:
输出m行,每行一个整数,表示答案
示例1
输入
复制
5 5 7
2 3 2 3 4
3 3
4 4
5 5
1 5
2 4
输出
复制
1
1
1
2
2
备注:
对于100%的数据,1 <= n , m <= 1000000 , 1 <= ai , k <= 1000000000
解题报告:
首先发现可以贪心,这样是O( nm )的
由于k固定,考虑数组中每个位置i向最大的j+1使得a[i..j]的和<=k连边。这个连边的结构是个森林,每次查询即查询树的一条链,可以倍增维护。O( nlogn + mlogn )
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 1e6 + 5;
int n,m;
ll K,a[MAX],sum[MAX];
int f[MAX][22];
int main()
{cin>>n>>m>>K;for(int i = 1; i<=n; i++) scanf("%lld",a+i),sum[i] = sum[i-1] + a[i];for(int i = 1; i<=n; i++) {int pos = upper_bound(sum+i,sum+n+1,sum[i-1]+K) - sum;f[i][0] = pos; }for(int j = 0 ; j<=21; j++) f[n+1][j] = n+1;for(int j = 1; j<=21; j++) {for(int i = 1; i<=n; i++)f[i][j] = f[f[i][j-1]][j-1];}while(m--) {int l,r;scanf("%d%d",&l,&r);int ans = 0;for(int j = 21; j>=0; j--) {if(f[l][j] <= r) ans += (1<<j),l = f[l][j];}if(f[l][0] > r) {printf("%d\n",ans+1);}else printf("Chtholly\n");}return 0 ;
}
【牛客 - 82B】区间的连续段(贪心,建图,倍增)相关推荐
- 【牛客NOIP模拟】路径难题【建图】【最短路证明】
题意:一张 nnn 个点 mmm 条边的无向图,边带距离,可以坐出租车,花费为距离除以常数 rrr 向上取整:也可以坐公交车,每路车行驶路线给定,无论坐多少站花费都为 cic_ici (每路车可能不 ...
- 小小粉刷匠 牛客(区间dp)
链接:https://ac.nowcoder.com/acm/problem/16129 来源:牛客网 题目描述 "lalala,我是一个快乐的粉刷匠",小名一边快活地唱着歌,一边 ...
- 牛客 华华听月月唱歌 贪心
https://ac.nowcoder.com/acm/contest/392/A 链接:https://ac.nowcoder.com/acm/contest/392/A 来源:牛客网 题目描述 月 ...
- 牛客每日一题3.31 城市网络 树上倍增
牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 有一个树状的城市网络(即 n 个城 ...
- 【牛客 - 370B】Rinne Loves Graph(分层图最短路 或 最短路dp)
题干: Island 发生了一场暴乱!现在 Rinne 要和 Setsuna 立马到地上世界去. 众所周知:Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些城镇之间用双向道路 ...
- 牛客 - 骚区间(线段树+思维)
题目链接:点击查看 题目大意:给出一个 1 ~ n 的排列 a ,现在规定骚区间当且仅当 a[ l ] 是 [ l , r ] 这段区间内的次小值,同时 a[ r ] 是 [ l , r ] 这段区间 ...
- 牛客 - umi和弓道(几何+贪心)
题目链接:点击查看 题目大意:在一个二维平面上,给出一个初始点 P ,接下来给出 n 个点当做靶子,现在初始节点会射击每个靶子,我们可以进行的操作是在 x 轴或 y 轴上建造一段连续长度的木板,使得初 ...
- 【Nowcoder】牛客小白月赛26 H 保卫家园 | 贪心、扫描线
emmm-考试周一天一套小白月赛保持手感- 别问为什么,怕被太难的题卡的挂科- 本来不想写什么题解,不过这题确实有妙处,就记录一下吧 题目大意: 为了抵御深渊的蔓延,被深渊毁掉家园的人们组建法兰不死队 ...
- 2021牛客多校10 - Train Wreck(贪心)
题目链接:点击查看 题目大意:给出一个合法的括号序列,再给出 nnn 个数字,括号序列对应着入栈和出栈,问是否存在一个合法的顺序,使得 nnn 个数字按照括号序列操作后,每次入栈后,栈中的序列都是不同 ...
最新文章
- 导师:学AI的不懂计算机视觉,那你别学了
- Vue入门三、过滤器filter
- 推荐11个构建和测试API的顶级工具
- boost::make_recursive_variant相关的测试程序
- python高级特性:迭代器与生成器
- 冠榕智能灯光控制协议分析(controller-node)
- php 取整函数 ceil floor round intval 随笔
- Linux /proc目录详解
- 最全下载jar包的网站
- [AIR] 获取U盘,打开U盘
- linux定时任务的设置 crontab 配置指南
- Spring Boot干货系列:(十二)Spring Boot使用单元测试
- php进度条实例,JavaScript_一个简单的jquery进度条示例,用jQuery实现的最简单的进度条 - phpStudy...
- dev、test和prod是什么意思?
- 将坐标系统保存为一个文件.prj
- Windows Server 2008 R2中Windows Server Backup功能之备份、恢复
- 最具创新价值人工智能产品 Imagination PowerVR NNA再获殊荣
- Java程序员面试宝典——重要习题整理
- php 代码加密运行,php加密后可以直接运行吗
- 夺宝答题王小程序完整源码(含前端/后端以及数据库脚本)
热门文章
- java 数据库连接池 开源_开源自己开发的一个JAVA数据库连接池,效果还算可以。...
- linux配置服务器超时退出,Linux下实现不活动用户登录超时后自动登出
- B. Trouble Sort Codeforces Round #648 (Div. 2)
- DAC8563芯片参考手册重要内容总结
- spring webflow : 上传单个文件实例
- maya怎么贴膜_maya怎么渲染成白膜?
- html5 php idea,五个HTML5新特性
- 在UE中自由绘制基本图元的几种方法
- a5d27 emmc启动 修改2
- python中的ix是啥_详谈Pandas中iloc和loc以及ix的区别