日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

luogu 1484\1792 种树 奇怪的贪心可反悔

發布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 luogu 1484\1792 种树 奇怪的贪心可反悔 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1484 種樹 此版本是線性的,那么根據鏈表維護即可;

構建新點,點的左右分別是原整個區間的前驅及后繼,再正常維護即可

注意兩個版本的維護有所不同

第二個版本的維護直接將左右兩點刪除

1792 種樹2? 此版本是環

1484

#include<bits/stdc++.h> #define ll long long using namespace std; const int N=500010; struct node{ll v;int id;bool operator <(node a)const{return v<a.v;}}; inline ll read(){ll x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;} ll a[N],ans; int l[N],r[N],vis[N]; priority_queue<node> q; int n,k; int main(){n=read();k=read();for(int i=1;i<=n;i++){a[i]=read();q.push((node){a[i],i});l[i]=i-1;r[i]=i+1;}int len=n;for(int i=1;i<=k;i++){while(!q.empty()&&vis[q.top().id]) q.pop();if(q.empty()||q.top().v<0)break;node u=q.top();q.pop();ans+=u.v;vis[u.id]=vis[l[u.id]]=vis[r[u.id]]=1;a[++len]=a[l[u.id]]+a[r[u.id]]-a[u.id];l[len]=l[l[u.id]],r[len]=r[r[u.id]];r[l[len]]=len;l[r[len]]=len;q.push((node){a[len],len});}printf("%lld\n",ans);return 0; }

?

1792

#include<bits/stdc++.h> #define M 200050 #define rep(i,x,y) for(register int i=x;i<=y;i++) using namespace std; inline int read(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;} struct node{int v,id;friend bool operator < (node x,node y){return x.v < y.v;} };priority_queue<node> q; int n,m,ans,chose,r[M],l[M],a[M]; bool vis[M]; void change(int x){vis[x]=1;r[l[x]]=r[x];l[r[x]]=l[x];r[x]=0;l[x]=0;} int main(){n=read(),m=read();rep(i,1,n) a[i]=read();if((n>>1)<m){printf("Error!\n");return 0;}rep(i,1,n-1) r[i]=i+1;r[n]=1;rep(i,2,n) l[i]=i-1;l[1]=n;rep(i,1,n) q.push((node){a[i],i});rep(i,1,m){while(vis[q.top().id]) q.pop() ;node u=q.top();q.pop();ans+=u.v;int ll=l[u.id],rr=r[u.id];a[u.id]=a[ll]+a[rr]-a[u.id];change(ll);change(rr);q.push((node){a[u.id],u.id});}printf("%d\n",ans);return 0; }

?

轉載于:https://www.cnblogs.com/asdic/p/9605510.html

總結

以上是生活随笔為你收集整理的luogu 1484\1792 种树 奇怪的贪心可反悔的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。