強烈譴責$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 }