bzoj1150: [CTSC2007]数据备份Backup

来源:互联网 发布:淘宝修改销量代码 编辑:程序博客网 时间:2024/06/04 19:50

细节好多

优先队列+贪心

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<cstdlib>#include<queue>using namespace std;struct data{       int l,r,v,ni,w;       bool operator <(const data &m)const{            return v>m.v;            }}d[200005],op,kp;int n,k;priority_queue<data>Q;int tot;long long ans=0;int e[200005];int a[100005];int main(){    int i,j,l,r;    scanf("%d%d",&n,&k);    for(i=1;i<=n;i++)scanf("%d",&a[i]);    d[0].v=0x3f3f3f3f;    d[0].l=d[0].r=d[0].w=0;    for(i=1;i<n;i++){       d[i].v=a[i+1]-a[i];       d[i].l=i-1;       if(i!=n-1)d[i].r=i+1;       d[i].ni=i;       d[i].w=1;       Q.push(d[i]);       }    tot=n-1;    while(k){         op=Q.top();         Q.pop();         if(e[op.ni]==0){            l=d[op.ni].l;            r=d[op.ni].r;            ans+=d[op.ni].v;            e[op.ni]=e[l]=e[r]=1;            k-=d[op.ni].w;            tot++;            d[tot].ni=tot;            d[tot].v=d[l].v+d[r].v-d[op.ni].v;            d[tot].l=d[l].l;            d[tot].r=d[r].r;            d[tot].w=d[l].w+d[r].w-d[op.ni].w;            d[d[l].l].r=tot;            d[d[r].r].l=tot;            Q.push(d[tot]);            }         }    printf("%lld",ans);    return 0;}



0 0
原创粉丝点击