[CF521D]Shop

题目大意:

你有一个长度为\(k(k\le10^5)\)的数列\(A_{1\sim k}\),有\(n(n\le10^5)\)种操作,操作包含以下\(3\)种:

  1. 将\(A_x\)变成\(y\);
  2. 将\(A_x\)加上\(y\);
  3. 将\(A_x\)乘以\(y\)。

定义这个数列的收益为各项之积,你可以从中选\(m\)个操作(每个操作至多选\(1\)次),使得收益最大,求任一操作的方案。

思路:

贪心,对于只有操作\(3\)的情况,显然从大到小贪心更优。

而操作\(2\)可以转化成操作\(3\),操作\(1\)又可以转化成操作\(2\),因此最后还是可以用同样的方式贪心。

源代码:

#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
#include<functional>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
typedef long long int64;
const int N=1e5+1;
int ans[N];
std::pair<int,int> b[N];
struct Modify {
int a,b,c;
bool operator > (const Modify &rhs) const {
return c>rhs.c;
}
};
Modify q[N];
std::vector<std::pair<int,int> > v[N];
struct Node {
int id;
double c;
bool operator < (const Node &rhs) const {
return c<rhs.c;
}
};
std::priority_queue<Node> h;
inline bool cmp(const int &i,const int &j) {
return q[i].a<q[j].a;
}
int main() {
const int k=getint(),n=getint(),m=getint();
for(register int i=1;i<=k;i++) {
v[i].push_back(std::make_pair(getint(),0));
}
for(register int i=1;i<=n;i++) {
q[i].a=getint();
q[i].b=getint();
q[i].c=getint();
if(q[i].a==1) {
b[q[i].b]=std::max(b[q[i].b],std::make_pair(q[i].c-v[q[i].b][0].first,i));
}
if(q[i].a==3) {
h.push((Node){i,1.*q[i].c});
}
}
for(register int i=1;i<=k;i++) {
if(b[i].first>0) v[i].push_back(b[i]);
}
for(register int i=1;i<=n;i++) {
if(q[i].a==2) {
v[q[i].b].push_back(std::make_pair(q[i].c,i));
}
}
for(register int i=1;i<=k;i++) {
std::sort(v[i].begin()+1,v[i].end(),std::greater<std::pair<int,int> >());
int64 sum=v[i][0].first;
for(register unsigned j=1;j<v[i].size();j++) {
h.push((Node){v[i][j].second,1.*(sum+v[i][j].first)/sum});
sum+=v[i][j].first;
}
}
for(register int i=1;!h.empty()&&i<=m;i++) {
ans[++ans[0]]=h.top().id;
h.pop();
}
if(ans[0]==0) {
puts("0");
return 0;
}
std::sort(&ans[1],&ans[ans[0]]+1,cmp);
for(register int i=0;i<=ans[0];i++) {
printf("%d%c",ans[i]," \n"[!(i%ans[0])]);
}
return 0;
}

[CF521D]Shop的更多相关文章

  1. CF521D Shop 贪心

    题意: \(n\)个数,有\(m\)个操作,形如: 1,将\(x_i\)​改成\(val_i\)​ 2,将\(x_i\)加上\(val_i\)​ 3,将\(x_i\)​乘上\(val_i\) 其中第\ ...

  2. 「CF521D」 Shop

    「CF521D」 Shop 传送门 题目说是有三种操作,首先可以知道赋值操作是可以转化为加法操作的,即 \((1,b) \rightarrow (2,b-a_i)\) 然后加法对于一个数你肯定优先选择 ...

  3. 「CF521D」Shop

    传送门 Luogu 解题思路 当只有第三类操作时,我们显然先进行val较大的操作,这是显然的. 那么就考虑把所有的操作都转变为第三类操作. 第一类操作,显然很容易变为第二类操作:单点维护最大的最终结果 ...

  4. codeforces 632+ E. Thief in a Shop

    E. Thief in a Shop time limit per test 5 seconds memory limit per test 512 megabytes input standard ...

  5. Codeforces632E Thief in a Shop(NTT + 快速幂)

    题目 Source http://codeforces.com/contest/632/problem/E Description A thief made his way to a shop. As ...

  6. poj1157LITTLE SHOP OF FLOWERS

    Description You want to arrange the window of your flower shop in a most pleasant way. You have F bu ...

  7. Magicodes.Shop——版本历史

    Magicodes.Shop为湖南心莱信息科技有限公司(xin-lai.com)Magicodes系列产品之一. 产品中引用的Magicodes系列Nuget包的开源库地址为:https://gith ...

  8. sgu 104 Little shop of flowers 解题报告及测试数据

    104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...

  9. PHP Yii1.1.13(一):命令行创建应用~shop

    第一节 初始目录结构 (1)初识目录结构 在创建应用之前,我们来看一下Yii 1.x版本的目录结构:将yii-1.1.13安装文件解压到网站根目录下,打开framework目录,其目录如下图所示 (2 ...

随机推荐

  1. linux内核驱动中对字符串的操作【转】

    转自:http://www.360doc.com/content/12/1224/10/3478092_255969530.shtml Linux内核中关于字符串的相关操作,首先包含头文件: #inc ...

  2. CSS选择器中带点(.)怎么办?

    在SharePoint中很多元素的ID都用点(.)来连接的,比如: <li class="ms-cui-group" id="Ribbon.Documents.Ed ...

  3. 阿里云服务器搭建FTP

    操作系统:Windows Server 2008 R2企业版. 首先,创建一个用户组:ftpUsers,创建一个用户:ftpAdmin.并将ftpAdmin隶属于ftpUsers组 其次,需要安装ft ...

  4. 001_ansible通过堡垒机登录

    一. 之前一直通过跳板机登录线上服务器,ssh可以的,如下图所示 vim ~/.ssh/config ssh xx.xx.xx.xx线上服务器是可以的,但是ansible执行显示目标主机不可达,其实a ...

  5. 读SRE Google运维解密有感(三)

    前言 这是读“SRE Google运维解密”有感第三篇,之前的文章可访问www.addops.cn来查看.我们今天来聊聊“on call”也就是运维值班制度, 本人到目前为止也还在参与一线运维的值班, ...

  6. CopyPropertis

    commons-beanutils.jar PropertyUtils.copyProperties(Object dest, Object orig) spring-beans.jar BeanUt ...

  7. OCM_第十五天课程:Section6 —》数据库性能调优 _SQL 访问建议 /SQL 性能分析器/配置基线模板/SQL 执行计划管理/实例限制

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  8. three.js 相机camera位置属性设置详解

    开始很懵逼,完全不能理解,有个position,还要up和lookAt干嘛. [黑人问号脸❓❓❓] 既然是位置属性不明白,那默认其它属性都懂了. 上坐标轴: 先来第一个position属性,可以设置x ...

  9. Java String str = new String(value)和String str = value区别

    示例代码: public class StringDemo2 { public static void main(String[] args) { String s1 = new String(&qu ...

  10. 【Leetcode】404. Sum of Left Leaves

    404. Sum of Left Leaves [题目]中文版  英文版 /** * Definition for a binary tree node. * struct TreeNode { * ...