博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
区间的连续段~ST表(模板题)
阅读量:5208 次
发布时间:2019-06-14

本文共 1276 字,大约阅读时间需要 4 分钟。

链接:

来源:牛客网

时间限制:C/C++ 7秒,其他语言14秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

给你一个长为n的序列a和一个常数k

有m次询问,每次查询一个区间[l,r]内所有数最少分成多少个连续段,使得每段的和都 <= k

如果这一次查询无解,输出"Chtholly"

输入描述:

第一行三个数n,m,k 第二行n个数表示这个序列a 之后m行,每行给出两个数l r表示一次询问

输出描述:

输出m行,每行一个整数,表示答案
示例1

输入

5 5 72 3 2 3 43 34 45 51 52 4

输出

11122

备注:

对于100%的数据,1 <= n , m <= 1000000 , 1 <= ai , k <= 1000000000

 

 

这题需要用到倍增算法,倍增博大精深啊。

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 9 const int maxn =1e6+10;10 typedef long long ll;11 ll sum[maxn],f[maxn][22];12 13 int main() {14 ll n,m,k;15 scanf("%lld%lld%lld",&n,&m,&k);16 for (int i=1 ;i<=n ;i++){17 ll x;18 scanf("%lld",&x);19 sum[i]=sum[i-1]+x;20 }21 for (int i=0 ;i<=21 ;i++ ) f[n+1][i]=n+1;22 for (int i=n ;i>=1 ;i-- ) {23 f[i][0]=upper_bound(sum+i,sum+n+1,sum[i-1]+k)-sum;24 for (int j=1 ;j<=21 ;j++) {25 f[i][j]=f[f[i][j-1]][j-1];26 }27 }28 while(m--){29 ll x,y,ans=0;30 scanf("%lld%lld",&x,&y);31 for (int i=21 ;i>=0 ;i--){32 if (f[x][i]<=y) ans+=1<
y) printf("%lld\n",ans+1);35 else printf("Chtholly\n");36 }37 return 0;38 }

 

转载于:https://www.cnblogs.com/qldabiaoge/p/8728277.html

你可能感兴趣的文章
Tomcat源码分析(六)--日志记录器和国际化
查看>>
今天把csdn的博客搬家到博客园
查看>>
D3.js+Es6+webpack构建人物关系图(力导向图),动态更新数据,点击增加节点,拖拽增加连线......
查看>>
基于网络的 Red Hat 无人值守安装
查看>>
Mybatis第六篇【配置文件和映射文件再解读、占位符、主键生成与获取、Mapper代理】...
查看>>
MySQL学习笔记(二):MySQL数据类型汇总及选择参考
查看>>
jQ 移动端返回顶部代码整理
查看>>
博客园界面美化
查看>>
sql查询远程数据库的表的数据并填充到本地数据库的表
查看>>
YII缓存依赖的应用
查看>>
决策树在机器学习的理论学习与实践
查看>>
Biee 11g权限详解
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
PHP基础入门(二)
查看>>
[Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
18款在线代码片段测试工具
查看>>
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>