luogu 2827 蚯蚓 單調隊列/優先隊列

來源:互聯網
上載者:User

標籤:efi   git   getc   add   tmp   get   int   names   put   

易知可利用優先隊列選取最大值;

但是通過分析可知,先取出的蚯蚓分開後仍然要比後分的長,所以可直接利用單調隊列找隊頭即可,分三個單調隊列,分別找未切割,切割,切割2三種情況

#include<bits/stdc++.h>#define rep(i,x,y) for(register int i=x;i<=y;i++)#define ll long longusing namespace std;const int inf=2147483647;const int N=1e5+5;const int M=7e6+5;int n,m,q,u,v,t,add;int Q[3][M],head[3],tail[3]; 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;}    inline bool cmp(const int &x,const int &y){return x>y;}inline int getmax(){    int res=-inf,k;    for(int i=0;i<=2;i++)    if(head[i]<tail[i]&&res<Q[i][head[i]+1])    res=Q[i][head[i]+1],k=i;          head[k]++;return res;}    int main(){    n=read(),m=read(),q=read();    u=read(),v=read(),t=read();        rep(i,1,n) Q[0][++tail[0]]=read();    sort(Q[0]+1,Q[0]+1+tail[0],cmp);        rep(i,1,m){        int x=getmax()+add;        if(i%t==0) printf("%d",x),putchar(i+t>m?‘\n‘:‘ ‘);        int l=(ll)x*u/v,r=x-l;         Q[1][++tail[1]]=l-add-q;        Q[2][++tail[2]]=r-add-q;add+=q;    }    if(t>m) putchar(‘\n‘);    int tmp=n+m;    rep(i,1,tmp){        int x=getmax()+add;        if(i%t==0) {printf("%d",x);if(i+t<=tmp) putchar(‘ ‘);}    }return 0;}

 

luogu 2827 蚯蚓 單調隊列/優先隊列

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.