有n个房间和n盏灯,你需要在每个房间里放入一盏灯。每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照亮。
你可以去附近的商店换新灯泡,商店里所有正整数功率的灯泡都有售。但由于背包空间有限,你至多只能换k个灯泡。
你需要找到一个合理的方案使得每个房间都被完全照亮,并在这个前提下使得总功率尽可能小。

Input

第一行两个整数n,k(1<=k<=n<=500000)。
第二行n个整数p[i](1<=p[i]<=10^9),表示你现有的灯泡的功率。
第三行n个整数w[i](1<=w[i]<=10^9),表示照亮每间房间所需要的最小功率。

Output

如果无法照亮每间房间,仅输出NIE。
否则输出最小的总功率。

Sample Input
6 2
12 1 7 5 2 10
1 4 11 4 7 5
Sample Output
33

贪心,只有一个背包,只能最多换k个灯泡,先用优先队列堆,为每个房间设置一个最小限度的灯泡,如果不存在,那就得去换灯泡,如果换的灯泡的个数大于k,输出‘NIE'
如果背包还有剩余空间,就把剩下的灯泡差值最大的几个也换掉,这样得到的就是功率最小的灯泡了。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a[500010],b[500010],c[500010];
ll ans = 0;
bool cmp(ll x,ll y)
{
    return x>y;
}
int main()
{
    priority_queue< ll,vector<ll>,greater<ll> > q;//优先小
    int n,k;
    cin>>n>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        ans += b[i];
    }
    sort(a+1,a+1+n,cmp);
    sort(b+1,b+1+n,cmp);
    for(int i=1,j=1;i<=n;i++)
    {
        for(;j<=n&&a[j]>=b[i];j++)
        {
            q.push(a[j]);
        }
        if(q.empty()){
            if(!k){
                cout<<"NIE"<<endl;
                return 0;
            }
            k--;
            c[i] = 0;
        }else{
            c[i] = q.top()-b[i];
            q.pop();
        }
    }
    if(k)
    {
        sort(c+1,c+1+n,cmp);
        for(int i=1;i<=k;i++)
        {
            c[i] = 0;
        }
    }
    for(int i=1;i<=n;i++)
        ans += c[i];
    cout<<ans<<endl;
    return 0 ;
}