HDU 4544狭苦しいシリーズの物語――ウサギ撲滅(優先列)

1604 ワード

タイトル:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37957
コード:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<iostream>
using namespace std;

#define N 100005

struct node
{
    int d,p;
    friend bool operator<(node c,node d)
    {
        return c.p>d.p;                   //         
    }
}b[N];

int a[N];

int cmp(int a,int b)
{
    return a>b;
}

int cmp1(node a,node b)
{
    return a.d>b.d;
}

int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        priority_queue<node>q;

        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a[i]);
        }

        for(int i=1;i<=m;i++)
        {
            scanf("%d",&b[i].d);
        }

        for(int i=1;i<=m;i++)
        {
            scanf("%d",&b[i].p);
        }

        sort(a+1,a+1+n,cmp);
        sort(b+1,b+1+m,cmp1);

        int res=1;
        __int64 ans=0;
        int flag=0;

        for(int i=1;i<=n;i++)
        {
            while(res<=m&&b[res].d>=a[i])
            {
                q.push(b[res]);
                res++;
            }
            if(q.empty())
            {
                flag=1;
                break;
            }
            else
            {
                ans=ans+q.top().p;
                q.pop();             //  
            }
        }
        if(flag==1)
            printf("No
"); else printf("%I64d
",ans); } }