zoukankan      html  css  js  c++  java
  • HDOj 4544

    题目链接   http://acm.hdu.edu.cn/showproblem.php?pid=4544

    #include<iostream>
    #include<stdio.h>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    using namespace std;
    
    struct date
    {
        int val,harm;
        bool operator <( const date &a )const
        {
            return val < a.val;
        }
    }node[112345],temp;
    
    int arr[112345];
    
    struct date2
    {
        int sum,lt,rt;
    }cnt[412345];
    
    void build_tree( int lt,int rt,int t )
    {
        cnt[t].lt = arr[lt];
        cnt[t].rt = arr[rt];
        cnt[t].sum = rt - lt + 1;
        if( lt == rt )return;
        int mid = ( lt + rt )>>1;
        build_tree( lt,mid,t<<1 );
        build_tree( mid+1,rt,t<<1|1 );
    }
    
    bool query( int harm,int t )
    {
        if( cnt[t].lt == cnt[t].rt ){ cnt[t].sum--;return true; }
        if( cnt[t<<1|1].sum && cnt[t<<1|1].lt <= harm )
        {
            bool fell = query( harm,t<<1|1 );
            if( fell )
            {
                cnt[t].sum--;
                return fell;
            }
        }
        if( cnt[t<<1].sum && cnt[t<<1].lt <= harm )
        {
            bool fell = query( harm,t<<1 );
            if( fell )
            {
               cnt[t].sum--;
               return fell;
            }
        }
        return false;
    }
    
    int main( )
    {
        int N,M,i,j;
        while( scanf("%d%d",&N,&M) != EOF )
        {
            for( i = 1; i <= N; i++ )
                scanf( "%d",&arr[i] );
            sort( &arr[1],&arr[1] + N );
            build_tree( 1,N,1 );
            for( i = 1; i <= M; i++ )
                scanf( "%d",&node[i].harm );
            for( i = 1; i <= M; i++ )
                scanf( "%d",&node[i].val );
            sort( &node[1],&node[1]+M );
            long long val = 0;int ans = 0;
            if( N > M )
            {
                printf("No\n");
                continue;
            }
            for( i = 1; i <= M; i++ )
            {
                if( query( node[i].harm,1 ) )
                {
                    val += (long long)node[i].val;
                    ans++;
                    if( ans == N ) break;
                }
            }
            if( ans == N )printf("%I64d\n",val);
            else          printf("No\n");
        }
        return 0;
    }
  • 相关阅读:
    Perface(TCP/IP 协议族)
    CHAPTER 2 Database Environment
    Chapter 1 Introduction
    2. Instructions: Language of the computer (指令:计算机语言)
    sed命令
    磁盘配额
    外设,镜像
    磁盘及文件系统挂载
    网络客户端工具命令
    TCP协议
  • 原文地址:https://www.cnblogs.com/wulangzhou/p/3057370.html
Copyright © 2011-2022 走看看