http://codeforces.com/problemset/problem/1260/D

首先很明显可以想到二分答案,把能力值数组排个序就好。

考虑怎么check。

设当前二分值为w,即不能直接跨过权值>w的陷阱。

将所有的陷阱按l升序排列。可以发现,如果两个或多个

陷阱重叠,肯定是这个人直接从这几个陷阱最小的l走到

最大的r最优。

证明?这里只给出两个区间重叠的情况。

假设两个区间分别为[a,b],[c,d],a<c<b<d。

想把队伍从a带到d,第一种的总时间为3(d-a);如果是a->c

->a->b->d->c->d,总耗时是3(c-a)+3(d-b)-(c-b)

=3d+2c-2b-3a>3d-3a。

用双指针模拟就好。

#include<bits/stdc++.h>
using namespace std;
#define re register int
#define F(x,y,z) for(re x=y;x<=z;x++)
#define FOR(x,y,z) for(re x=y;x>=z;x--)
#define I inline void
#define IN inline int
typedef long long ll;
I read(int &res){
re g=1;register char ch=getchar();res=0;
while(!isdigit(ch)){
if(ch=='-')g=-1;
ch=getchar();
}
while(isdigit(ch)){
res=(res<<3)+(res<<1)+(ch^48);
ch=getchar();
}
res*=g;
}
int n,m,k,t,p,q,X,Y,sum,lim,a[202000];
inline bool bbb(int x,int y){
return x>y;
}
struct Barrier{
int l,r,w;
friend bool operator < (Barrier x,Barrier y){
return x.l==y.l?x.r<y.r:x.l<y.l;
}
}b[202000];
IN ck(int x){
if(!x)return 1;
sum=0;
lim=a[x];
p=1;
while(p<=k&&b[p].w<=lim)p++;
if(p>k)X=sum=0;
else sum=X=b[p].l-1;
while(p<=k){
Y=b[p].r;
q=p+1;
while(q<=k&&(b[q].w<=lim||b[q].l<=Y)){
if(b[q].w>lim)Y=max(Y,b[q].r);
q++;
}
sum+=3*(Y-X);
X=Y;
if(q>k)break;
sum+=(b[q].l-1-X);
X=b[q].l-1;
p=q;
}
sum+=(m-X);
//cout<<x<<" "<<sum<<endl;
if(sum<=t)return 1;
return 0;
}
IN divided(int x,int y){
if(x==y)return x;
re mid=(x+y+1)>>1;
if(ck(mid))x=mid;
else y=mid-1;
return divided(x,y);
}
int main(){
read(n);read(m);read(k);read(t);m++;
F(i,1,n){
read(a[i]);
}
sort(a+1,a+1+n,bbb);
F(i,1,k){
read(b[i].l);read(b[i].r);read(b[i].w);
}
sort(b+1,b+1+k);
b[k+1].l=0;
if(m>t){
cout<<"0";
return 0;
}
cout<<divided(0,n);
return 0;
}

CF1260D A Game with Traps的更多相关文章

  1. [转]50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs

    http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/ 50 Shades of Go: Traps, Gotc ...

  2. 绕过PALOALTO TRAPS EDR解决方案

    0x1 技术点 PaloAlto Traps(EDR解决方案)基于行为封锁和标记许多黑客工具. 0x2 绕过方法 最简单的解决方案就是禁用内置实用程序,即; Cytool.Cytool是一个集成命令行 ...

  3. C Traps:运算

    位移 如果sizeof(int) = 4,那么下面的代码的结果是什么? int x=255; printf("%d", x>>34); 实际输出:63 在编译这个代码时 ...

  4. C Traps:优先级常见错误

    逻辑与关系运算符 if (flags & FLAG != 0) {...} 这类错误以前也犯过,因为!=的优先级比&要高所以实际上是这样的 if (flags & (FLAG ...

  5. [转载] C 陷阱与缺陷( C traps and Pitfalls )

    本文转自 https://www.xuebuyuan.com/1951579.html 自己找工作过程中复习过的书包括<C traps and Pitfalls>,<编程珠玑> ...

  6. <C Traps and Pitfalls>笔记

    //------------------------------------------------------------------------------ 2.1 理解函数的声明: 编写一个独立 ...

  7. 【C traps and pit falls】阅读笔记

    已经是第几遍读C 陷阱与缺陷了,某种意义上,这不是一本常读常新的书,大概是因为读一遍过后就记住了. 一.编译器在将程序分解成符号的时候,使用的是大嘴法. 二.使用不对称边界有很多好处. 三.缓冲输出与 ...

  8. Python Tips and Traps(二)

    6.collections 模块还提供有OrderedDict,用于获取有序字典 import collections d = {'b':3, 'a':1,'x':4 ,'z':2} dd = col ...

  9. Python Tips and Traps(一)

    1.如果想得到一个列表的index和内容,可以通过enumerate快速实现 drinks = ['coffee','tea', 'milk', 'water'] for index, drink i ...

随机推荐

  1. Json在序列化注意问题

    Java中的Json序列化,不容忽视的getter 问题重现 public class AjaxJson { private boolean success; private String msg; ...

  2. 阿里巴巴编程规约--digest

    所谓卫语句,如果某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回.这样的单独检查常常被称为“卫语句”. 微服务之间将DTO,Req放到一个单独的项目中,相关的项目都依赖这个底层 ...

  3. LeetCode 959. Regions Cut By Slashes

    原题链接在这里:https://leetcode.com/problems/regions-cut-by-slashes/ 题目: In a N x N grid composed of 1 x 1 ...

  4. 第三章 - SQL基础及元数据获取

    SQL的介绍 SQL的定义:结构化查询语句 SQL的作用:对库和表进行操作 SQL的常用分类 DDL 数据定义语言(Data Definition Language) DCL 数据控制语言(Data ...

  5. Xamarin 自定义OnKeyDown 再按一次退出程序的实现

    private DateTime? lastBackKeyDownTime; public override bool OnKeyDown(Keycode keyCode, KeyEvent e) { ...

  6. linux命令之------Cat命令

    Cat命令 作用:cat命令用于连接文件并打印,查看文件内容: -n或--number:由1开始对所有输出的行数编号: -b或--number-nonblank:和-n相似,只不过对于空白行不做编号: ...

  7. CORS跨域资源共享总结

    1.CORS简述 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源(协议 + 域名 + 端口)服务 ...

  8. 微信小程序电影模板

    [外链图片转存失败(img-STw401rR-1565101469846)(https://upload-images.jianshu.io/upload_images/11158618-52efd0 ...

  9. java.lang.IllegalAccessException: void #####.MyBroadcastReceiver.() is not accessible from jav

    java.lang.IllegalAccessException: void #####.MyBroadcastReceiver.<init>() is not accessible fr ...

  10. mysql rtrim() 函数

    mysql> select rtrim(" cdcdcd "); +--------------------+ | rtrim(" cdcdcd ") | ...