HZOJ trade

強烈譴責$skyh$的沒$\Huge 臉$行爲。ios

很經典的可反悔貪心,然而我一直覺得是sbdp還一直想着怎麼優化……ide

正常的貪心確定是不對的。優化

可是因爲A-C=A-B+B-C,spa

因此用一個小根堆維護,每次將當前天的a加入,表示當前天能夠買入,code

若是堆頂小於a,取出堆頂,ans加上差,再次將當天的a加入,那麼若是以後賣出更優則會減掉當前的a利用差價知足了貪心性質。blog

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<queue>
 5 #define int LL
 6 #define LL long long
 7 using namespace std;
 8 int n,a[100010];
 9 
10 inline int read();
11 signed main()//dp xds//優化dp//單調
12 {
13 //    freopen("trade14.in","r",stdin);
14 
15     n=read();for(int i=1;i<=n;i++)a[i]=read();
16     
17     priority_queue<int,vector<int>,greater<int> >A;
18     LL ans=0;A.push(a[1]);
19     for(int i=2;i<=n;i++)
20     {
21         if(A.top()<a[i])
22         {
23             ans+=a[i]-A.top();A.pop();
24             A.push(a[i]);
25         }
26         A.push(a[i]);
27     }
28     printf("%lld\n",ans);
29 }
30 inline int read()
31 {
32     int s=0,f=1;char a=getchar();
33     while(a<'0'||a>'9'){if(a=='-')f=-1;a=getchar();}
34     while(a>='0'&&a<='9'){s=s*10+a-'0';a=getchar();}
35     return s*f;
36 }
View Code
相關文章
相關標籤/搜索