zoukankan      html  css  js  c++  java
  • bzoj1150 堆应用,好题

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 100005
    #define INF 0x3fffffff
    #define pa pair<int,int>
    
    int n,k,pre[maxn],nxt[maxn],len[maxn];
    priority_queue<pa,vector<pa>,greater<pa> >q;
    
    int main(){
        scanf("%d%d",&n,&k);
        int now,last=0;
        for(int i=1;i<=n;i++){
            scanf("%d",&now);
            len[i]=now-last;
            last=now;
            pre[i]=i-1;nxt[i]=i+1;
        }//len[1]是没用的 
        pre[2]=0,nxt[n]=0;
        for(int i=2;i<=n;i++)
            q.push(make_pair(len[i],i));
        int ans=0;
        while(k--){
            while(q.top().first!=len[q.top().second])
                q.pop();//这一步不能省略 
            pa tmp=q.top();q.pop();
            int pos=tmp.second;
            int l=pre[pos],r=nxt[pos];
            ans+=tmp.first;
            pre[nxt[pos]=nxt[r]]=pos;
            nxt[pre[pos]=pre[l]]=pos;
            len[pos]=l&&r?min(INF,len[l]+len[r]-len[pos]):INF;
            len[l]=len[r]=INF;
            q.push(make_pair(len[pos],pos));
        }
        printf("%d
    ",ans);
    }
  • 相关阅读:
    poj 1010
    poj 1060
    poj 1001
    POJ 2769
    POJ 2559
    poj 2403
    POJ 1088
    设置全屏与退出全屏
    iframe 父子页面方法调用
    Web 前端面试小知识
  • 原文地址:https://www.cnblogs.com/zsben991126/p/10247587.html
Copyright © 2011-2022 走看看