cf1175 D\E
链接
D 题意
把序列分成连续k段,f(i)表示i这个在第几段
\(\sum\limits_{i=1}^{n}a_i*f(i)\)最大
思路
想象成从k层积木依次递减
先把积木搭满,也就是\(sum_n*k\)
然后考虑删除积木,删除k-1个最小的前缀和就行。
sum[n]不能加进去
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=3e5+7;
int n,k;
ll sum[N];
int main() {
scanf("%d%d",&n,&k);
for(int i=1,val;i<=n;++i) {
scanf("%d",&val);
sum[i]=sum[i-1]+val;
}
ll ans=k*sum[n];
sort(sum+1,sum+n);
for(int i=1;i<k;++i) ans-=sum[i];
cout<<ans<<"\n";
return 0;
}
E 题意
多次询问求一条线段最少被多少线段覆盖
思路
倍增
f[i][j]表示从第i个点出发,用\(2^j\)条线段最多到哪里,
注意从0开始
代码
#include <bits/stdc++.h>
using namespace std;
const int N=5e5+7;
int n,m,f[N][21],bj;
int main() {
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) {
int x,y;
scanf("%d%d",&x,&y);
f[x][0]=max(f[x][0],y);
bj=max(bj,y);
}
for(int i=1;i<=bj;++i) f[i][0]=max(f[i-1][0],f[i][0]);
for(int j=1;j<=20;++j)
for(int i=0;i<=bj;++i)
f[i][j]=f[f[i][j-1]][j-1];
for(int j=1;j<=m;++j) {
int ans=0,x,y;
scanf("%d%d",&x,&y);
for(int i=20;i>=0;--i)
if(f[x][i]<y)
ans+=1<<i,x=f[x][i];
printf("%d\n",f[x][0]>=y?ans+1:-1);
}
return 0;
}
cf1175 D\E的更多相关文章
- CF-1175 B.Catch Overflow!
题目大意:有一个初始变量,值为0,三种操作 for x 一个循环的开始,循环x次 end 一个循环的结束 add 将变量值加一 问最后变量的值是否超过2^32-1,若超过,输出一串字符,不超过则输出变 ...
随机推荐
- Tomcat 配置文件解析工具 Digester
Digester 是一个依据 xml 配置文件动态构建 Java 对象树的工具,基于 SAX 解析器进行封装,它为 SAX 事件的处理提供了更高级和友好的接口,让开发更专注于要执行的处理,隐藏了 XM ...
- 3DESC加密算法
3DESC 请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程序之间采用的算法有一点差异,java的3des加密采用的是"DESede/ ...
- 2019 中手游java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.中手游等公司offer,岗位是Java后端开发,因为发展原因最终选择去了中手游,入职一年时间了,也成为了面试官 ...
- MySQL导入数据报错Got a packet bigger than‘max_allowed_packet’bytes错误的解决方法
由于max_allowed_packet的值设置过小的原因,只需要将max_allowed_packet值设置大一点就OK了.通过终端进入mysql控制台,输入如下命令可以查看max_allowed_ ...
- thinkPHP+LayUI 懒加载实现
html <div class="layui-container" id="container"> </div> js,要引入layui ...
- ExtendEvent-判断DB是否有在使用
判断一个DB是否在被使用,需要观察一段时间,创建一个扩展事件会话,收集该DB是否有执行SQL即可. 创建会话 CREATE EVENT SESSION [DB_Usage] ON SERVER ) A ...
- docker的小技巧记录(如果使用了更多会继续添加)
docker小技巧 复制本地sql脚本到docker容器mysql中进行使用 # 找到容器 docker ps # 复制文件 cp ./xxx.sql container-id:/tmp/ # 进入容 ...
- Prometheus(四):Prometheus+Alertmanager 配置邮件报警
此处默认已安装Prometheus服务,服务地址:192.168.56.200 一.安装Alertmanager 此处采用源码编译的方式安装.首先下载alertmanager的软件包,下载地址:ht ...
- 将java的jar包作为windows的服务来启动
1.在idea中用maven将程序打成jar,放到运行的目录中. 2.去github上面下载winsw: https://github.com/kohsuke/winsw/releases 3. 将W ...
- IDisposable 接口
提供一种用于释放非托管资源的机制. 地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.idisposable?view=netframewor ...