CodeForces-1257D (贪心+双指针)
题意
https://vjudge.net/problem/CodeForces-1257D
你需要操作m个英雄去打败n只怪物,每个英雄的力量值为pi,可以打败si只怪物;每只怪物的力量值为ai。
当新的一天开始时,你可以选择其中1个英雄去打怪。若在之前已有k只怪物被打败,这个英雄将挑战第k+1只怪物,此时有两种情况:
1.英雄力量≤怪物力量,则英雄撤退,这一天结束。
2.英雄力量>怪物力量,怪物被打败。继续挑战下一只怪物。当n只怪物全部被打败,或该英雄已打败的怪物数量=si时,这一天结束。
你的任务是计算出打败所有怪物所需要的最小天数。
思路
最简单的想法就是用si大的尽可能多打。
维护每个耐力值si对应的力量最大的英雄,因为相等耐力值情况下肯定是选力量最大的要好。
再维护上面数组的后缀最大值,这个其实就是耐力值少的也可以(注意是可以!不是一定)用耐力值大的代替,比如对于耐力值i,i+1,如果i+1的力量大于i,那么完全可以用i+1代替i去打,因为耐力值比i大。
然后用双指针求解,当前遍历到第i个怪物,用j往右边延伸,看最远能打到哪个怪物,这里要实时记录这一段怪物力量的最大值,如果v[j-i+1]>=mx (v是上述处理完后缀最大值后的数组),那么就可以延伸,v[j-i+1]表示耐力值为j-i+1~n(这一段的耐力值大于mx的英雄都可以使用)的最大英雄力量值。
代码
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int a[N],v[N];
int main()
{
std::ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
v[i]=0;
}
int m;
cin>>m;
for(int i=1;i<=m;i++)
{
int p,s;
cin>>p>>s;
v[s]=max(v[s],p);
}
for(int i=n-1;i>=1;i--)
{
v[i]=max(v[i],v[i+1]);
}
int i=1,j,ans=0,flag=0;
while(i<=n)
{
if(a[i]>v[1])
{
flag=1;
break;
}
j=i;
int mx=a[i];
while(j<=n&&v[j-i+1]>=mx)
{
j++;
mx=max(mx,a[j]);
}
ans++;
i=j;
// cout<<i<<" "<<ans<<endl;
}
if(flag)
cout<<-1<<endl;
else
cout<<ans<<endl;
}
return 0;
}
CodeForces-1257D (贪心+双指针)的更多相关文章
- Codeforces Round #277.5 (Div. 2) B. BerSU Ball【贪心/双指针/每两个跳舞的人可以配对,并且他们两个的绝对值只差小于等于1,求最多匹配多少对】
B. BerSU Ball time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- CodeForces - 893D 贪心
http://codeforces.com/problemset/problem/893/D 题意 Recenlty Luba有一张信用卡可用,一开始金额为0,每天早上可以去充任意数量的钱.到了晚上, ...
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 831D) - 贪心 - 二分答案 - 动态规划
There are n people and k keys on a straight line. Every person wants to get to the office which is l ...
- Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 828D) - 贪心
Arkady needs your help again! This time he decided to build his own high-speed Internet exchange poi ...
- Mashmokh and ACM CodeForces - 414D (贪心)
大意: 给定n结点树, 有k桶水, p块钱, 初始可以任选不超过k个点(不能选根结点), 在每个点放一桶水, 然后开始游戏. 游戏每一轮开始时, 可以任选若干个节点关闭, 花费为关闭结点储存水的数量和 ...
- HihoCoder 1053 : 居民迁移 二分+贪心+双指针(好题)
居民迁移 时间限制:3000ms 单点时限:1000ms 内存限制:256MB 描述 公元2411年,人类开始在地球以外的行星建立居住点.在第1326号殖民星上,N个居住点分布在一条直线上.为了方便描 ...
- CodeForces - 93B(贪心+vector<pair<int,double> >+double 的精度操作
题目链接:http://codeforces.com/problemset/problem/93/B B. End of Exams time limit per test 1 second memo ...
- C - Ordering Pizza CodeForces - 867C 贪心 经典
C - Ordering Pizza CodeForces - 867C C - Ordering Pizza 这个是最难的,一个贪心,很经典,但是我不会,早训结束看了题解才知道怎么贪心的. 这个是先 ...
- Codeforces 570C 贪心
题目:http://codeforces.com/contest/570/problem/C 题意:给你一个字符串,由‘.’和小写字母组成.把两个相邻的‘.’替换成一个‘.’,算一次变换.现在给你一些 ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
随机推荐
- 【Gradle】Android Gradle 插件
Android Gradle 插件 Android Gradle 插件简介 从Gradle角度来看,Android其实是Gradle的一个第三方插件,它是由Google的Android团队开发的.但从 ...
- xBIM 综合使用案例与 ASP.NET MVC 集成(一)
XbimWebUI是一个Javascript库,可用于BIM模型的Web表示.它使用WebGL并且独立于任何第三方WebGL框架.查看器的数据格式为WexBIM.不能直接加载IFC文件. 一.将IFC ...
- Data Management Technology(5) -- Recovery
Recovery Types of Failures Wrong data entry Prevent by having constraints in the database Fix with d ...
- Python中机器学习-验证码识别-粗略总结
#验证码识别# 解决办法:将验证码切割成单个字符训练 遇到问题:验证码字符大小不一或重叠 对上述问题的解决:通过CNN(卷积神经网络)直接就是端到端不分割的识别方式 处理验证码:将图片二值化 输入验证 ...
- IT开发、PM、UI/UE学习路线图(非原创-参考传智播客网站介绍)
文章大纲 一.Go语言+区块链学习路线图二.PHP学习路线图三.Python学习路线图四.C/C++学习路线图五.大数据学习路线图六.经理学习路线图七.UI/UE路线图八.参考文章 一.Go语言+区块 ...
- 自己写的一个连数据库的音乐调用模块 MusicRj
#自己定义 class MusicRj: # 创音乐表t_music # sql = '''CREATE TABLE t_music1( # id INT PRIMARY KEY AUTO_INCRE ...
- 微信小程序出现 text 设置行高 line-height 无效的问题
前言: 我在写程序过程中遇到过给text加line-height不生效的问题,但是也有生效的情况,如果不生效了就按下面的解决方法处理吧. 解决办法: 在text的外层嵌套一层view,然后给view设 ...
- 3-3 用户管理-新建用户useradd和passwd
3.用户管理 终端命令 提示:创建用户/删除用户/修改其他用户密码的终端命令都需要通过sudo执行 3.1创建用户/修改密码/删除用户 序号 命令 作用 说明 01 useradd -m -g 组 新 ...
- JAVA实现二维码生成加背景图
pom.xml依赖 <!-- 二维码生成 --> <!-- https://mvnrepository.com/artifact/com.google.zxing/c ...
- apache httpd反向代理的用法
代理方式有三种:正向代理.透明代理和反向代理 正向代理 httpd通过ProxyRequests指令配置正向代理的功能.例如: ProxyRequests On ProxyVia On <Pro ...