首页 > 其他分享 >CF865D Buy Low Sell High

CF865D Buy Low Sell High

时间:2023-07-11 19:44:24浏览次数:34  
标签:Sell ch CF865D int Buy Low 价格

CF865D Buy Low Sell High

我发现自己是真的学不会贪心……太玄学了。
这是一道反悔贪心的题目,比较简单的那种。

题意

你是一棵韭菜,喜欢炒股,每天可以买入一股或卖出一股,且最后一天之后你持有的股票数目应该为 \(0\)。你现在知道 \(n\) 天的股票价格,求最大获利。

思路

首先一个很显然的策略就是,我们从前往后扫,对于每一个数,找到它之前最小的那个数,如果可以获利,就增加答案。但这样有一个显然的问题,就是如果之后有价格更高的天数,那之前的最小价格就“浪费”了,我们现在就是要对这个浪费进行一个反悔。
我们发现,在第 \(i\) 天买入股票,在第 \(j\) 天卖出,等价于你在第 \(i\) 天买入,在第 \(k\) $(i < k < j) $天卖出后立刻买入,然后在第 \(j\) 天卖出。在这个过程中,你的第 \(k\) 天实际上是没有买卖的,但是你的实际操作是进行了买卖。那我们可以利用堆来维护前 \(i-1\) 天的最小价格,每次把第 \(i\) 个价格插入堆,如果可以买卖,就再次插入第 \(i\) 个价格。这时候,第二个插入的价格就相当于上文中的第 \(k\) 个价格,用来让以后的可能有的更大的数去贡献答案,也就是说,对于每一个可能贡献答案的价格,都要减两次才能真正成为那个买入的价格。
代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 3e5+10;

inline int read(){
	int x = 0; char ch = getchar();
	while(ch<'0' || ch>'9') ch = getchar();
	while(ch>='0' && ch<='9') x = x*10+ch-48, ch = getchar();
	return x;
}
int n;
ll ans;
priority_queue<int, vector<int>, greater<int> > q;
int main(){
	n = read();
	for(int i = 1; i<=n; ++i){
		int tmp = read();q.push(tmp);
		if(q.size() && tmp>q.top()) ans+=tmp-q.top(), q.pop(), q.push(tmp);
		
	}
	printf("%lld\n", ans);
	return 0;
}

标签:Sell,ch,CF865D,int,Buy,Low,价格
From: https://www.cnblogs.com/frostwood/p/17545750.html

相关文章

  • Buyer's Call
    http://www.investopedia.com/terms/b/buyerscall.asp#axzz1r7gvLjmmhttp://www.investopedia.com/terms/c/call.asp#axzz1r7gvLjmmDefinitionof'Buyer'sCall'Anagreementbetweenabuyerandsellerwherebyacommoditypurchaseoccursataspecifi......
  • xhsell和mobaxterm的对比
    xsehll跟mobaxterm应该是两个用户最多的ssh工具了,难分上下,但是我还是比较喜欢xshell的,mobaxterm太臃肿,没用的功能太多,下面就做个对比,简单说一下。文末附:xshell7免费版去广告,mobaxtream22.1汉化版一、软件设置1、中文支持:xshell是支持中文的,没什么可说的。文章源自今夕何夕兮-......
  • Sell Pigs 题解
    SellPigs双倍经验题目大意有\(n\)个顾客前来买猪,共有\(m\)个猪圈,每个顾客携带着某一些猪圈的钥匙,需要买一定数量的猪。在顾客买完后,我们可以将打开的猪圈中的猪随意移动,移动完毕后所有的猪圈将关闭,直到下一个顾客到来时才能打开其拥有钥匙对应的猪圈。求最多能卖出多少猪......
  • [USACO08NOV]Buying Hay S
    [USACO08NOV]BuyingHayS题目描述FarmerJohnisrunningoutofsuppliesandneedstopurchaseH(1<=H<=50,000)poundsofhayforhiscows.HeknowsN(1<=N<=100)haysuppliersconvenientlynumbered1..N.Supplierisellspackagesthatcon......
  • tBNB怎么购买比较靠谱?币售Bisell购买测试币教程
    随着测试币水龙头的日渐枯竭,对于很多开发者和撸毛用户来说,去哪里领水是个大问题。于是,基于测试币的交易平台——币售Bisell就出现了。币售Bisell提供几乎所有测试链的测试币交易服务,包括tBNB、GoerliETH、AGOR、SepoliaETH测试币等等,可以以任何方式买到自己想要的测试币。......
  • dangdang_bestsellers_recent24hours
    童书文学成功/励志管理传记社会科学科普读物经济投资理财......
  • Missing binding E:\server\dovip\buyer-pc-web\node_modules\node-sass\vendor
    errorin./src/components/Search.vue?vue&type=style&index=0&id=7cb41050&scoped=true&lang=scss&SyntaxError:Error:MissingbindingE:\server\dovip\buyer-pc-web\node_modules\node-sass\vendor\win32-x64-83\binding.nodeNod......
  • 洛谷 P4544 [USACO10NOV]Buying Feed G - 题解
    https://www.luogu.com.cn/problem/P4544感觉是很没意思的DP+DS优化,以前做过几道更难的题:https://codeforces.com/contest/1788/problem/Ehttps://atcoder.jp/contests/abc288/tasks/abc288_f这种题只要是让我写总是能把代码整的伤痕累累(逃第一眼:我艹不就是一个sbDP吗......
  • java.lang.NoSuchMethodException: com.innovation.web.BuyServlet.get(javax.servlet
    问题描述我将路径定义到相应的servlet的函数方法里面,然后就出现了这个问题,很明显的找不到相应的函数方法;问题解决将目光重新放到我定义的相关路径那里,发现我出于习惯,将servlet里面原本应该是名为checkIt的函数方法写成了get方法,改回去之后,这个问题也就解决啦!......
  • Selling Products
    AsalespersonmustsellnitemsinabagwithrandomIDs.Thesalespersoncanremoveasmanyasmitemsfromthebag.DeterminetheminimumnumberofdifferentIDsthefinalbagcancontainafterperforming,atmost,mdeletions.Examplen=6ids=[1,1......