#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <queue> #include <algorithm> using namespace std; #define MAXN 100005 #define LL long long int tu[MAXN]; struct Ji{ int d; LL p; }ji[MAXN]; priority_queue<int, vector<int>, greater<int> >que; int cmpt(int a, int b) { return a > b; } int cmpj(struct Ji a, struct Ji b) { return a.d > b.d; } int main() { int N, M; while(~scanf("%d%d", &N, &M)) { while(!que.empty())que.pop(); for(int i = 0; i < N; ++i)scanf("%d", &tu[i]); sort(tu, tu + N, cmpt); for(int i = 0; i < M; ++i)scanf("%d", &ji[i].d); for(int i = 0; i < M; ++i)scanf("%I64d", &ji[i].p); sort(ji, ji + M, cmpj); LL ans = 0; int i, j; for(i = 0, j = 0; i < N; ++i) { while((j < M) && (ji[j].d >= tu[i])) { que.push(ji[j].p); ++j; } if(que.empty())break; ans += que.top(); que.pop(); } if(j < N) printf("No\n"); else printf("%I64d\n", ans); } return 0; }

本文介绍了一个使用 C++ 实现的程序,该程序利用优先队列解决了一个特定问题。通过输入两个整数 N 和 M,程序读取 N 个整数并 M 组数据,每组数据包含一个整数 d 和一个 long long 类型的 p。程序将整数按降序排列,并根据条件将数据放入优先队列中,最终输出计算结果。
274

被折叠的 条评论
为什么被折叠?



