zoukankan      html  css  js  c++  java
  • bzoj1572

    题解:

    每一次不能满足的时候

    找一个之前有过的

    然后最小的

    和他替换

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=100005;
    long long ans;
    int x[N],y[N],l,f[N],n,d[N];
    void down(int x)
    {
        int i=x;
        if (x*2<=l&&d[x*2]<d[x])i=x*2;
        if (x*2<l&&d[x*2+1]<d[i])i=x*2+1;
        if (i!=x)
         {
             swap(d[i],d[x]);
             down(i);
         }
    }
    void up(int x)
    {
        if (x==1)return;
        if (d[x]<d[x/2])
         {
             swap(d[x],d[x/2]);
             up(x/2);
         } 
    }
    int cmp(int a,int b)
    {
        return x[a]<x[b];
    }
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)scanf("%d%d",&x[i],&y[i]),f[i]=i,x[i]=min(x[i],n); 
        sort(f+1,f+n+1,cmp);
        for (int i=1;i<=n;i++)
         {
             d[++l]=y[f[i]];
             up(l);
             ans+=y[f[i]];
            if (x[f[i]]<l)
             {
                 ans-=d[1];
                 d[1]=d[l--];
                 down(1);
             } 
         }
        printf("%lld
    ",ans); 
    }
  • 相关阅读:
    Python之内置函数再总结
    内置函数
    函数递归
    字符编码之文件处理
    文件处理
    python1数据链接总结
    知识点练习day9
    第一周作业
    python1
    网络基础预习
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8459119.html
Copyright © 2011-2022 走看看