传送门

文章目录

  • 题意:
  • 思路:

题意:

给你nnn个人,每个人都有个能力值aia_iai​。让后在1−m1-m1−m的路上有kkk个陷阱,每个陷阱的范围是[li,ri][l_i,r_i][li​,ri​],伤害是did_idi​,能力值低于did_idi​的人不能通过陷阱,你可以跑到rir_iri​处把这个陷阱摧毁,这样就可以带人过去了。现在起点在000,让带尽可能多的人到m+1m+1m+1点。

思路:

很明显的二分,我们先把aaa数组排序,让后二分带多少人,让后下界就是最小值mimimi,checkcheckcheck的时候需要将di>mid_i>midi​>mi的陷阱都摧毁。
下面我们忽略di<mid_i<midi​<mi的陷阱。
因为陷阱是一个线段,当两个陷阱有重叠的时候,肯定是尽可能往后走,走到这个连续区间段的最后,这样这个连续区间内不存在陷阱就可以走过去了,我们发现来回一趟再把人带过去是三次,我们只需要把这个长度乘333即可。
这个显然可以用差分来做,对于差分后的数组,我们只需要看看前缀和是否>0>0>0,如果>0>0>0那么ans+=3ans+=3ans+=3(因为我们要过去再回来带人再过去),否则ans+=1ans+=1ans+=1即可。我这里用的是暴力找rightrightright的方法,当时都写一半了也懒得改了,差分这种统计方法比较简单也很巧妙。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<assert.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,m,k,t;
int a[N];
vector<PII>v[N],vv[N],tp[N];bool check(int mid)
{int mi=a[n-mid+1];LL cs=0,pos=0;while(pos!=m+1){int mx=-1; pos++;for(int i=0;i<v[pos].size();i++) if(mi<v[pos][i].Y) mx=max(mx,v[pos][i].X);if(mx==-1) cs++;else{int right=mx;for(int i=pos;i<=right;i++){for(int j=0;j<v[i].size();j++)if(v[i][j].Y>mi) right=max(right,v[i][j].X);}pos--;cs+=3*(right-pos);pos=right;}if(cs>t) return false;}if(cs<=t) return true;else return false;
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);cin>>n>>m>>k>>t;for(int i=1;i<=n;i++) scanf("%d",&a[i]); a[n+1]=INF;sort(a+1,a+1+n);for(int i=1;i<=k;i++){int a,b,c; scanf("%d%d%d",&a,&b,&c);v[a].pb({b,c});}int l=0,r=n,ans=0;while(l<=r){int mid=l+r>>1;if(check(mid)) ans=mid,l=mid+1;else r=mid-1;}printf("%d\n",ans);return 0;
}
/**/

Educational Codeforces Round 77 (Rated for Div. 2) D. A Game with Traps 贪心 +二分相关推荐

  1. Educational Codeforces Round 77 (Rated for Div. 2)A~C[数学场]

    A. Heating 题目大意:就是给你一个数n把它分成k份始得每一份的平方和最小: 思路:1.如果k足够大那么将n分成n个1平方和为n是最小的 2.如果k < n,我们还是从第一点出发,先将n ...

  2. Educational Codeforces Round 77 (Rated for Div. 2) C. Infinite Fence 数论

    传送门 文章目录 题意: 思路: 题意: 思路: 碰到这样的题肯定是先写几个找找规律了,随便写几个就可以发现是以lcm(a,b)lcm(a,b)lcm(a,b)为一个循环,所以我们只需要在一个周期lc ...

  3. Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies 【贪心 】

    传送门:http://codeforces.com/contest/1082/problem/B B. Vova and Trophies time limit per test 2 seconds ...

  4. Educational Codeforces Round 96 (Rated for Div. 2)C. Numbers on Whiteboard(贪心算法(水题))

    题目链接: 传送门 题目贴上: 题意:,给你 1-n个数,你可以对两个不同位置的数进行合并,比如a和b,合成数变成(a+b)/2,结果四舍五入.放在数组末尾,删除原来的a和b,举例子吧 就这样子两两合 ...

  5. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  6. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  7. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  8. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  9. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

最新文章

  1. 图像处理 100 问!!
  2. python中的栈结构_python中有栈吗
  3. 【模板】第二类斯特林数Stirling
  4. android自定义金额输入键盘_Android 自定义输入支付密码的软键盘实例代码
  5. 怎么上传文件到kk服务器,VS Code 关于SFTP上传文件到多服务器的配置
  6. python弹球小游戏程序_Python实现弹球小游戏
  7. Kubernetes学习之路(26)之kubeasz+ansible部署集群
  8. 正负样本不平衡处理方法总结【转】
  9. 手机摄像头的组成结构和工作原理
  10. matlab跑微分方程画图,偏微分方程工具箱PDE
  11. 介绍大家一个很好玩的网站。多人在线flash联机游戏。
  12. python能解决什么数据问题_浅谈Python数据分析
  13. 怎么找回删除的文件?尝试下这些恢复数据的方法
  14. 使用 Neo4j 图数据库可视化(网络安全)知识图谱
  15. 计算机系统(一)期末复(yu)习(1):数据表示以及数字逻辑(电路)
  16. C++学习笔记和面试备考(二, 转)
  17. 彩云小译怎么翻译网页_彩云小译插件,中英双语对照网页翻译,支持视频字幕翻译...
  18. Fri Feb 22 20:22:00 CST 2019字符串型转date
  19. 用java获取一维数组的平均值_java中一维数组常见运算
  20. 【无重复字符的最长子串--三种方法】

热门文章

  1. 清华姚班毕业生不配自信?张昆玮在豆瓣征女友,却被网友群嘲......
  2. 面试算法工程师时,我居然被化学专业转行的老哥血虐了
  3. 3 年工作经验程序员应有的技能
  4. 提升代码可读性的 10 个技巧
  5. 点击ride界面edit空白_『技术锦囊』如何在SOLIDWORKS界面调用宏程序?
  6. java实现数字转mac,Java Ethernet.getSourceMAC方法代码示例
  7. linux访问nfs端口号,linux nfs配置及访问控制
  8. sm缩写代表什么意思_pe、PE在电气有代表什么意思,你发现没有,电气技术很有意思...
  9. 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...
  10. northstar机器人编程_《机器人构建实战》——导读