文章目录

  • 题目
  • 思考

题目


独立思考能力不足
我们假设已经选出了我们要保镖,设他们的集合为 SSS ,记 sum=∑i∈Saisum=\sum_{i\in S}a_isum=∑i∈S​ai​
则对于每个保镖的约束条件为: sum−ai>bisum-a_i>b_isum−ai​>bi​
我们要让 SSS 的大小最小
我们移项后可得:
sum>ai+bisum>a_i+b_isum>ai​+bi​
我们发现这个式子是对 iii 保镖是否能选的唯一限制
同时这个不等式还有传递性
于是考虑按照 ai+bia_i+b_iai​+bi​ 排序
我们要尽量选择在 iii 前的 aja_jaj​ 较大的使得 sum>ai+bisum>a_i+b_isum>ai​+bi​ (因为这样个数才少)
然后我们建立权值线段树
保留 aia_iai​ 后每次查询需要最少的即可

#include<set>
#include<map>
#include<stack>
#include<ctime>
#include<cmath>
#include<queue>
#include<cstdio>
#include<vector>
#include<climits>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
LL read(){bool f=0;LL x=0;char c=getchar();while(c<'0'||'9'<c){if(c=='-')f=1;c=getchar();}while('0'<=c&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();return !f?x:-x;
}
#define lch (i<<1)
#define rch (i<<1|1)
#define MAXN 500000
#define INF 0x3f3f3f3f
struct node{int l,r,cnt;LL sum;
}tree[5*MAXN+5];
void Build(int i,int L,int R){tree[i]=(node){L,R,0,0};if(L==R)return ;int Mid=(L+R)>>1;Build(lch,L,Mid),Build(rch,Mid+1,R);return ;
}
void PushUp(int i){tree[i]=(node){tree[i].l,tree[i].r,tree[lch].cnt+tree[rch].cnt,tree[lch].sum+tree[rch].sum};return ;
}
LL d[MAXN+5];
void Insert(int i,int L,int R,int pos){if(L==R){tree[i].cnt++,tree[i].sum+=d[pos];return ;}int Mid=(L+R)>>1;if(pos<=Mid) Insert(lch,L,Mid,pos);else Insert(rch,Mid+1,R,pos);PushUp(i);return ;
}
int Query(int i,int L,int R,LL val){if(L==R)return (val+d[L]-1)/d[L];int Mid=(L+R)>>1;if(tree[rch].sum>=val)return Query(rch,Mid+1,R,val);return Query(lch,L,Mid,val-tree[rch].sum)+tree[rch].cnt;
}
struct task{LL a,b;friend bool operator < (task a,task b){return a.a+a.b<b.a+b.b;}
}guard[MAXN+5];
int dcnt;
void Discrete(){sort(d+1,d+dcnt+1);dcnt=unique(d+1,d+dcnt+1)-(d+1);return ;
}
int main(){int n=read();for(int i=1;i<=n;i++)guard[i].a=read(),guard[i].b=read(),d[++dcnt]=guard[i].a;sort(guard+1,guard+n+1);int ans=INF;Discrete();Build(1,1,dcnt);LL sum=0;for(int i=1;i<=n;i++){if(sum>=guard[i].b)ans=min(ans,Query(1,1,dcnt,guard[i].b)+1);sum+=guard[i].a;Insert(1,1,dcnt,lower_bound(d+1,d+dcnt+1,guard[i].a)-d);}if(ans==INF) puts("-1");else printf("%d\n",ans);return 0;
}

思考

问题转化

保镖(2019CSP-S模拟2C)(贪心,线段树)相关推荐

  1. CF1526C2 Potions (Hard Version) (贪心 + 线段树)

    题目链接: Potions (Hard Version) 大致题意 有n个数, 编号从1~n, 第i个位置的值为a[i]. 从编号为1的数字开始选择, 一直到编号为n的数字. 对于第i个数字, 你可以 ...

  2. 2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)

    传送门 听说是最长反链衍生出的对偶定理就能秒了. 本蒟蒻直接用线段树模拟维护的. 对于第一维排序. 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解. 代码 转载于: ...

  3. 【贪心 / 线段树模拟费用流增广】BZOJ4977 [Lydsy八月月赛] 跳伞求生

    [题目] 原题地址 有nn个队友和mm个敌人,每个队友有一个攻击力aia_i,每个敌人有攻击力bib_i和价值cic_i.你可以选择若干个队友,每个队友ii分别去怼一个敌人jj,当ai>bja_ ...

  4. BZOJ 5249: [2018多省省队联测]IIIDX(贪心 + 线段树)

    题意 这一天,\(\mathrm{Konano}\) 接到了一个任务,他需要给正在制作中的游戏 \(\mathrm{<IIIDX>}\) 安排曲目 的解锁顺序.游戏内共有\(n\) 首曲目 ...

  5. BSOJ4851:攻略 贪心+线段树

    4851 -- [模拟试题]攻略 Description 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>,这款游戏有n个场景 ...

  6. [九省联考2018]IIIDX 贪心 线段树

    ~~~题面~~~ 题解: 一开始翻网上题解看了好久都没看懂,感觉很多人都讲得不太详细,所以导致一些细节的地方看不懂,所以这里就写详细一点吧,如果有不对的or不懂的可以发评论在下面. 首先有一个比较明显 ...

  7. CodeForces - 1529E Trees of Tranquillity(贪心+线段树)

    题目链接:https://vjudge.net/problem/CodeForces-1529E 题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出 ...

  8. CF280D-k-Maximum Subsequence Sum【模拟费用流,线段树】

    正题 题目链接:https://www.luogu.com.cn/problem/CF280D 题目大意 一个长度为nnn的序列,mmm次操作 修改一个数 询问一个区间中选出kkk段不交子段使得和最大 ...

  9. 【tyvj】P2065 「Poetize10」封印一击(贪心+线段树/差分)

    http://new.tyvj.cn/p/2065 我就不说我很sb的用线段树来维护值...... 本机自测的时候想了老半天没想出怎么维护点在所有区间被多少区间包含的方法.最后一小时才想出来线段树(果 ...

  10. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

最新文章

  1. 抱怨IT公司人才缺乏?留住现有人才方是正途
  2. JVM:常用调优命令
  3. 单例模式volatile
  4. [转]php-fpm配置具体解释
  5. Node Sass does not yet support your current environment
  6. html5 版街头霸王,街头霸王5全DLC整合版
  7. 简单工厂模式(Simple Factory Pattern)
  8. linux shell 退出_dialog命令在linux系统中使用方法
  9. laravel常用命令整理
  10. 通过MBean server监控weblogic应用
  11. UG NX10.0 软件安装教程
  12. Mac OS 使用终端连接到Linux
  13. OCR电子发票批量自动合成软件
  14. Android ANR原理代码分析(三)
  15. 深入理解GlusterFS之数据均衡
  16. java get请求 数组_GET方式请求的url参数如果是数组,该形式/base/get?foo[]=barfoo[]=baz'报错......
  17. 【Vite】1380- 详解 Vite 依赖预构建流程
  18. 简历c语言项目,C/C++:如何介绍简历中的项目?
  19. SQL中“||”的作用
  20. 正则匹配所有字符(包括换行)

热门文章

  1. 《论文写作》课程感想
  2. Chrome translate plugins install 谷歌翻译插件安装
  3. 竞品分析—QQ、微信
  4. 最伟大的IT人物10强(转)
  5. 将指定小程序页面设置为首页的两种方式
  6. electron-mac应用-代码签名及公证(教科书式操作-亲测有效)
  7. html放大镜原理,js放大镜效果原理
  8. java中intern_Java中的intern()方法是什么?
  9. 直播活动策划方案怎么做
  10. Python批量爬取谷歌原图,2021年最新可用版