CF1320C World of Darkraft: Battle for Azathoth
线段树
又是熟悉的感觉,又是E题写完了,没调完,不过还好上了紫
可以发现可以打败怪兽的关系类似二维偏序
那么首先考虑第一维(武器)以攻击值($a_{i}$)进行排序
把所有的怪兽以防御力($x_{i}$)进行排序
然后用双指针维护到目前遍历到的武器,可以打败的怪兽
然后考虑防具和怪兽的攻击力也就是第二维
首先先定义$lb$数组,$lb[i]$表示所选防具至少为$i$的最少花费
可以用差分求出
可以发现如果选到防御力为$i$的防具,那么所有当前可以打败的怪兽中,只要攻击力小于$i$都可以累加到答案中
那么考虑$mx[i]$表示维护防御力最大为$i$的最大获利(包含防具的开支,武器的开支在最后计算)
对于一只新增的怪兽只要$i$大于其防御力,那么$mx[i]$都可以加上这只怪兽的获利
线段树维护即可
还要注意武器和防具里必选,不能不选
1 #include <bits/stdc++.h>
2 #define inf 1e18
3 #define int long long
4 using namespace std;
5 const int N=2*1e5+100,NUM=1e6+100;
6 int n,m,p,lb[NUM],ans,mb;
7 struct tool
8 {
9 int f,cost;
10 };
11 tool a[N],b[N];
12 struct monsters
13 {
14 int x,y,z;
15 }c[N];
16 struct node
17 {
18 int MAX,lazy;
19 }sh[NUM*4];
20 bool cmp(tool a,tool b)
21 {
22 return a.f<b.f;
23 }
24 bool cmp1(monsters a,monsters b)
25 {
26 return a.x<b.x;
27 }
28 void pushup(int x)
29 {
30 sh[x].MAX=max(sh[x+x].MAX,sh[x+x+1].MAX);
31 }
32 void pushdown(int x)
33 {
34 if (sh[x].lazy!=0)
35 {
36 sh[x+x].lazy+=sh[x].lazy;
37 sh[x+x+1].lazy+=sh[x].lazy;
38 sh[x+x].MAX+=sh[x].lazy;
39 sh[x+x+1].MAX+=sh[x].lazy;
40 sh[x].lazy=0;
41 }
42 }
43 void build(int x,int l,int r)
44 {
45 if (l==r)
46 {
47 sh[x].MAX=-lb[l];//处理当前防具的价格
48 return;
49 }
50 int mid=(l+r)>>1;
51 build(x+x,l,mid);
52 build(x+x+1,mid+1,r);
53 pushup(x);
54 }
55 void change(int x,int l,int r,int ll,int rr,int v)//区间修改
56 {
57 if (ll<=l && r<=rr)
58 {
59 sh[x].MAX+=v;
60 sh[x].lazy+=v;
61 return;
62 }
63 int mid=(l+r)>>1;
64 pushdown(x);
65 if (ll<=mid) change(x+x,l,mid,ll,rr,v);
66 if (rr>mid) change(x+x+1,mid+1,r,ll,rr,v);
67 pushup(x);
68 }
69 signed main()
70 {
71 scanf("%lld%lld%lld",&n,&m,&p);
72 for (int i=1;i<=n;i++) scanf("%lld%lld",&a[i].f,&a[i].cost);
73 for (int i=1;i<=m;i++) scanf("%lld%lld",&b[i].f,&b[i].cost);
74 for (int i=1;i<=p;i++) scanf("%lld%lld%lld",&c[i].x,&c[i].y,&c[i].z);
75 sort(a+1,a+1+n,cmp);
76 sort(c+1,c+1+p,cmp1);
77 for (int i=1;i<=m;i++) mb=max(mb,b[i].f);
78 for (int i=1;i<=mb;i++) lb[i]=inf;
79 for (int i=1;i<=m;i++) lb[b[i].f]=min(lb[b[i].f],b[i].cost);
80 for (int i=mb-1;i>=1;i--) lb[i]=min(lb[i+1],lb[i]);//差分求出lb数组
81 ans=-inf;
82 build(1,1,mb);
83 for (int i=1,j=1;i<=n;i++)
84 {
85 while (c[j].x<a[i].f && j<=p)//双指针维护当前可以击败的怪兽
86 {
87 if (c[j].y+1<=mb)//在防御力最大的防具之内
88 change(1,1,mb,c[j].y+1,mb,c[j].z);//要严格大于
89 j++;
90 }
91 ans=max(ans,-a[i].cost+sh[1].MAX);//最后计算武器的代价
92 }
93 printf("%lld\n",ans);
94 }
CF1320C World of Darkraft: Battle for Azathoth的更多相关文章
- Codeforces 1321E World of Darkraft: Battle for Azathoth
题意 有\(n\)个武器,第\(i\)个武器攻击力为\(a_i\),价值\(ca_i\). 有\(m\)个防具,第\(i\)个防具防御力为\(b_i\),价值\(cb_i\). 有\(p\)个怪,第\ ...
- Codeforces Round #625 (1A - 1D)
A - Journey Planning 题意: 有一列共 n 个城市, 每个城市有美丽值 b[i], 要访问一个子序列的城市, 这个子序列相邻项的原项数之差等于美丽值之差, 求最大的美丽值总和. ...
- Solution -「线段树」题目集合
T1 无聊的数列 来自:Link flag 帖先从水题入手. 首先分析题目,它是以等差数列为原型进行的修改.等差数列一大性质就是其差分数列的值除第一项以外均相等. 于是不难想到使用差分数列进行维护. ...
- 【Virt.Contest】CF1321(div.2)
第一次打虚拟赛. CF 传送门 T1:Contest for Robots 统计 \(r[i]=1\) 且 \(b[i]=0\) 的位数 \(t1\) 和 \(r[i]=0\) 且 \(b[i]=1\ ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- Codeforces 738D. Sea Battle 模拟
D. Sea Battle time limit per test: 1 second memory limit per test :256 megabytes input: standard inp ...
- Codeforces #380 div2 D(729D) Sea Battle
D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- The 2015 China Collegiate Programming Contest C. The Battle of Chibi hdu 5542
The Battle of Chibi Time Limit: 6000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Othe ...
- get a new level 25 battle pet in about an hour
If you have 2 level 25 pets and any level 1 pet, obviously start with him in your lineup. Defeat all ...
随机推荐
- C++实现串口通信问题(与Arduino)
参考1(已验证稍加修改可与Arduino通信):https://blog.csdn.net/qq_36106219/article/details/81701368 参考2(比较全,main函数需要自 ...
- Thymeleaf 异常:Exception processing template "index": An error happened during template parsing (template: "class path resource [templates/index.html]")
Spring Boot 项目,在 Spring Tool Suite 4, Version: 4.4.0.RELEASE 运行没有问题,将项目中的静态资源和页面复制到 IDEA 的项目中,除了 IDE ...
- Azure内容审查器之羞羞图审查
上一篇 Azure 内容审查器之文本审查我们已经介绍了如果使用Azure进行文字内容的审核.对于社区内容,上传的图片是否含有羞羞内容也是需要过虑的.但是最为一般开发者自己很难实现这种级别的智能识别.但 ...
- Thinkphp中D方法和M方法的区别
两者共同点都是实例化模型的,而两者不同点呢?一起来看一下: $User = D('User');括号中的参数User,对应的模型类文件的 \Home\Model\UserModel.class.php ...
- 最新最最最简单的Snagit傻瓜式破解教程(带下载地址)
最新最最最简单的Snagit傻瓜式破解教程(带下载地址) 下载地址 直接滑至文章底部下载 软件介绍 一个非常著名的优秀屏幕.文本和视频捕获.编辑与转换软件.可以捕获Windows屏幕.DOS屏幕:RM ...
- 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...
- linux网络收包过程
记录一下linux数据包从网卡进入协议栈的过程,不涉及驱动,不涉及其他层的协议处理. 内核是如何知道网卡收到数据的,这就涉及到网卡和内核的交互方式: 轮询(poll):内核周期性的检查网卡,查看是否收 ...
- Python数据类型--列表(list)
Python中列表对应的表示形式是"[]".列表中的元素可以是任何数据类型. 本文以List=[i for i in range(20)]为例进行论述:等价于List=[0, 1, ...
- ORM查询相关的操作
必知必会13条 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_practice.setti ...
- 解了这14道C语言谜题后,所有人都失声了!我来带你深入了解C!
本文展示了14个C语言的迷题以及答案,代码应该是足够清楚的,而且有相当的一些例子可能是我们日常工作可能会见得到的.通过这些迷题,希望你能更了解C语言. 如果你不看答案,不知道是否有把握回答各个谜题?让 ...