NC213755. 进攻
描述
输入描述
一行两个整数, n,m
第二行 n 个整数,表示
第三行 m 个整数,表示
第四行 m 个整数,表示
意义与题目描述中一致
输出描述
一行一个整数,表示最大价值
示例1
输入:
3 5 1 2 3 1 2 3 4 5 1 2 3 4 5
输出:
3
C++(clang++11) 解法, 执行用时: 419ms, 内存消耗: 6240K, 提交时间: 2020-11-21 22:37:26
#include<bits/stdc++.h> using namespace std; #define MAXN 1000128 #define fo(i,a,b) for(int i=a;i<b;++i) int a[MAXN]; pair<int,int> x[MAXN]; int main(){ int n,m,ans=0,mx=-1000000; cin>>n>>m; fo(i,0,n)cin>>a[i]; fo(i,0,m)cin>>x[i].first; fo(i,0,m)cin>>x[i].second; sort(x,x+m); sort(a,a+n); for(int i=0,j=0;i<n;++i){ while(j<m&&x[j].first<a[i])mx=max(mx,x[j++].second); if(mx>0)ans+=mx; } cout<<ans; return 0; }
Python3 解法, 执行用时: 1828ms, 内存消耗: 126828K, 提交时间: 2022-08-12 21:42:30
n,m = map(int,input().split()) a = list(map(int,input().split())) b = list(zip(list(map(int,input().split())),list(map(int,input().split())))) a.sort() b.sort() res,j,mx = 0,0,0 for i in a: while j < m and b[j][0] < i: mx = max(mx,b[j][1]) j += 1 res += mx print(res)