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上取整. 有无限个变 ...
随机推荐
- ckeditor5 使用第一天 下载并加载居中,居左,居右功能
官方网站地址https://ckeditor.com/,下载zip包或者从git上下载, 下载完成后解压文件,将文件复制到项目中 , 引用ckeditor.js,zh-cn.js路径到项目中, 初始化 ...
- nRF24L01+组网方式及防撞(防冲突)机制的实战分享
利用多个nRF24L01+模块组网通信的实现方式 这里讨论的组网方式,不包含使用6个通道实现的多对1通信方式,因其只限于6个发送端,局限性很大,可以附加其他技术实现更好的组网,暂时这里不讨论.这里分享 ...
- 使用docker简单搭建个人博客
首先介绍需要的yml文件,docker-compose.yml: version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/v ...
- Resolving RMAN-06023 or RMAN-06025 (Doc ID 2038119.1)
Resolving RMAN-06023 or RMAN-06025 (Doc ID 2038119.1) APPLIES TO: Oracle Database - Enterprise Editi ...
- jira问题更改项目
1.点击“问题”在问题中,筛选你要修改的问题,以下是以创建用户为搜索条件,然后点击“工具”---移动所有问题 2.选择要移动的问题,选择项目,进行移动
- AcWing 32. 调整数组顺序使奇数位于偶数前面
习题地址 https://www.acwing.com/solution/acwing/content/2921/ 输入一个整数数组,实现一个函数来调整该数组中数字的顺序. 使得所有的奇数位于数组的前 ...
- 2019 SDN上机第6次作业
2019 SDN上机第6次作业 1.实验拓扑 (1)实验拓扑 (2)使用Python脚本完成拓扑搭建 from mininet.topo import Topo from mininet.net im ...
- Java连载46-Java中的多态
一.多态的语法 1.关于多态中涉及到几个概念 (1)向上转型(upcasting) 子类型转换为父类型,又被称为自动类型转换 (2)向下转型(downcasting) 父类型转换为子类型,又被称为强制 ...
- Unity AI 感知侦探
游戏中AI的感知用的最多的是看到或者听到,也就是: 1.视觉感知 2.听觉感知 视觉感知: 视觉感知一般会有一个视野范围,这个范围与角色的朝向有关,只有在视觉范围内角色才有可能感知得到,这个范围与一个 ...
- 【LOJ#2507】[CEOI2011]Matching(KMP,树状数组)
[LOJ#2507][CEOI2011]Matching(KMP,树状数组) 题面 LOJ 题解 发现要做的是排名串的匹配. 然后我们考虑把它转成这个位置之前有多少个数小于当前这个数,这样子只要每个位 ...