「CF521D」 Shop
「CF521D」 Shop
题目说是有三种操作,首先可以知道赋值操作是可以转化为加法操作的,即 \((1,b) \rightarrow (2,b-a_i)\)
然后加法对于一个数你肯定优先选择大的加上去,这样规定了加法顺序之后加法操作也能转变为乘法操作。
然后现在只有乘法操作了,直接从大到小排一遍即可。
值得注意的是,选择了前 \(m\) 大的乘法操作之后,操作顺序需要按照 赋值->加法->乘法 的顺序进行,若顺序不对显然会使应得的答案变小。
代码:
/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
long long mx[maxn],id[maxn];
long long a[maxn],opt[maxn];
vector<pair<int,int> > add[maxn];
vector<pair<long double,int> > mul;
bool cmp(pair<long double,int> a,pair<long double,int> b){
return opt[a.second]<opt[b.second];
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int k,n,m;cin>>k>>n>>m;
for(int i=1;i<=k;++i) cin>>a[i];
for(int i=1;i<=n;++i){
long long a,b;cin>>opt[i]>>a>>b;
if(opt[i]==1){
if(mx[a]<b) mx[a]=max(mx[a],b),id[a]=i;
}
if(opt[i]==2){
add[a].emplace_back(b,i);
}
if(opt[i]==3){
mul.emplace_back(b,i);
}
}
for(int i=1;i<=k;++i) if(mx[i]>a[i]) add[i].emplace_back(mx[i]-a[i],id[i]);
for(int i=1;i<=k;++i){
sort(add[i].begin(),add[i].end());
reverse(add[i].begin(),add[i].end());
for(auto x:add[i]){
int u,v;tie(u,v)=x;
mul.emplace_back(1.0*(a[i]+u)/a[i],v);
a[i]+=u;
}
}
int cnt=min(m,(int)mul.size());
cout<<cnt<<'\n';
sort(mul.begin(),mul.end());
reverse(mul.begin(),mul.end());
sort(mul.begin(),mul.begin()+cnt,cmp);
int num=0;
if(cnt==0) return 0;
for(auto x:mul){
cout<<x.second<<' ';
++num;
if(num==cnt) break;
}
return 0;
}
「CF521D」 Shop的更多相关文章
- 「CF521D」Shop
传送门 Luogu 解题思路 当只有第三类操作时,我们显然先进行val较大的操作,这是显然的. 那么就考虑把所有的操作都转变为第三类操作. 第一类操作,显然很容易变为第二类操作:单点维护最大的最终结果 ...
- 【LOJ】#2985. 「WC2019」I 君的商店
LOJ#2985. 「WC2019」I 君的商店 一道很神仙的题啊QAQ 居然是智商题--不是乱搞或者是大数据 我们可以用2N问出一个最大值是1 然后对于任意两个值\(x + y\)和\(a\)比较 ...
- loj2985「WC2019」I 君的商店(二分,思维)
loj2985「WC2019」I 君的商店(二分,思维) loj Luogu 题解时间 真的有点猛的思维题. 首先有一个十分简单的思路: 花费 $ 2N $ 确定一个为 $ 1 $ 的数. 之后每次随 ...
- 「译」JUnit 5 系列:条件测试
原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...
- 「译」JUnit 5 系列:扩展模型(Extension Model)
原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...
- JavaScript OOP 之「创建对象」
工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...
- 「C++」理解智能指针
维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...
- 「JavaScript」四种跨域方式详解
超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...
- 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management
写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...
随机推荐
- ImportError:no mudle named 'cv2'
提供一下下载的网址:OpenCV,速度比较慢. 我的anaconda版本Python是3.6的,直接提供百度云下载: 链接:https://pan.baidu.com/s/1Xz9JrE2m-dwPv ...
- 物联网安全Wi-Fi漫游
物联网安全Wi-Fi漫游 根据Statistica的最新报告,到2021年,全球正在使用的Wi-Fi连接设备的数量预计将增长到222亿.这种Wi-Fi的广泛使用不仅包括消费者的Wi-Fi使用,而且还包 ...
- Ascend Pytorch算子适配层开发
Ascend Pytorch算子适配层开发 适配方法 找到和PyTorch算子功能对应的NPU TBE算子,根据算子功能计算出输出Tensor的size,再根据TBE算子原型构造对应的input/ou ...
- 激光雷达数据到云cloud
激光雷达数据到云cloud 在美国地质调查局的3D提升计划(3DEP)被激发到一个新的方式可用性宣布从3DEP仓库的访问和处理激光雷达点云数据. 3DEP一直在美国使用光检测和测距(激光)技术获取三维 ...
- https ssl(tls)为什么不直接用公钥加密数据?
很多人都提到了非对称加密速度慢,但这只是一个原因,但不是主要原因,甚至是微不足道的原因. SSL协议到3.0后就已经到头了,取而代之的是TLS,相较于SSL的"安全套接字层"的命名 ...
- 《精通 ASP.NET Core MVC (第七版)》开始发售
学习 Web 开发技术很难吗?没有适合的学习资料,确实很枯燥,很难.如果有一本如同良师益友的优秀图书辅助,就很轻松,一点也不难! 对于优秀的技术图书来说,必须从读者的角度来编写,而不是从作者的角度来编 ...
- 【NX二次开发】隐藏、显示对象UF_OBJ_set_blank_status
隐藏.显示对象用UF_OBJ_set_blank_status() 查看对象显示情况用UF_OBJ_ask_display_properties() 效果: 源码: #include "Te ...
- 【creo】CREO5.0+VS2019配置(还没写完)
欢迎大家一起学习使用c++对CREO5.0二次开发. 第1步,建立开发目录:在E盘(或者其他盘)新建creo_cpp文件夹,文件夹中新建ABC_TOOLS用来存放我们开发的工具,CODE文件夹存放开发 ...
- 你知道这高效的12个Java精品库嘛?
01. JUnit 第一个要说的当然是JUnit了,JUnit毕竟是Java圈目前最知名及常用的测试框架.JUnit之所以能够成为Java圈中最热门的测试库,是因为对于很多项目而言,单元测试是非常重要 ...
- 【题解】Luogu P3110 [USACO14DEC]驮运Piggy Back
[题解]Luogu P3110 [USACO14DEC]驮运Piggy Back 题目描述 Bessie and her sister Elsie graze in different fields ...