首页 > 其他分享 >D - Summer Vacation

D - Summer Vacation

时间:2024-01-19 11:11:07浏览次数:23  
标签:size Summer lld int Vacation include define

D - Summer Vacation

题意:有n个任务,每一天可以选择一个未完成的任务i来完成,并在ai天后获得bi的利益。问在m天内最多可以获得多少利益。

首先我们可以考虑假如i,j两个任务都在我们最后的答案里面,那么让a比较大的排在前面一定是更好的。所以我们先按照a降序排序。

然后用一个set维护前面已经选了的任务
新加一个任务就分为两种情况
设size为set的大小
如果size+a[i]<=m则直接加入,否则看set的最小值,如果当前最小值小于bi则进行替换,因为新加入的ai比前面的aj小,所以一定能够替换。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
#include<bitset>
#include<cmath>
#include<set>
#include<unordered_map>
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (ll (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))
#define A puts("Yes")
#define B puts("No")
using namespace std;
typedef double db;
typedef long long ll;
//typedef __int128 i128;
const int N=3e5+10;
//const int inf=1ll<<60;
const ll inf=1ll<<60;
const ll mo=1e9+7;
struct node{
	ll a,b;
};
node c[N];
multiset<ll> s;
ll n,m,ans;
int main()
{
//	freopen("data.in","r",stdin);
	scanf("%lld %lld",&n,&m);
	fo(i,1,n) scanf("%lld %lld",&c[i].a, &c[i].b);
	
	sort(c+1,c+n+1, [](node a,node b){
		return a.a>b.a;
	});
	
	fo(i,1,n) {
		if ((int)s.size()+c[i].a<=m) {
			s.insert(c[i].b);
			ans+=c[i].b;
		}
		else {
			if (!s.empty()) {
				if (*s.begin()<=c[i].b) {
					auto it=s.begin();
					ans-=*it;
					s.erase(it);
					s.insert(c[i].b);
					ans+=c[i].b;
				}
			}
		}
	}
	
	printf("%lld",ans);
	return 0;
}

	
 
 

标签:size,Summer,lld,int,Vacation,include,define
From: https://www.cnblogs.com/ganking/p/17974201

相关文章

  • Vacation
    用dp[i][j]表示第i天选了j类型的最大值#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;vector<int>a[N];intdp[N][3];voidsolve(){ intn; cin>>n; for(inti=1;i<=n;i++){ for(intj=1;j<=3;j++){ intx; cin>>x; ......
  • 初中英语优秀范文100篇-018My Summer Holiday-我的暑假
    PDF格式公众号回复关键字:SHCZFW018记忆树1MyfamilyandIwenttoHongKongtospendourholidaythissummer.翻译我和我的家人这个夏天去了香港度假简化记忆香港句子结构这个句子的结构可以分为以下几部分:主语:MyfamilyandI(我和我的家人)谓语动词:went(去)宾......
  • F - Vacation Query
    F-VacationQuery此题与4301CanyouansweronthesequeriesIII类似只不过要维护0和1两个值解法:区间修改和查询,可以利用线段树1.两区间合并的答案,要么lc(左子树)中,要么在rc(右子树)中,但是也有可能出现在(lc的右端点连续的1加上rc左端点连续的1),所以要多维护两个数据lmx(左......
  • 2023.08.29T3 - summer - solution
    summerProblemSolution挺好的题,题解也写得很清楚,因此我不过是把题解抄一遍。赛时打了\(40\)分,然后挂了\(20\)分,因为不会前缀和(这个人暴力求区间和,铸币吧)。前\(40\)分就是记忆化搜索+单调栈:首先考察对于一个确定的序列,如何求出一段区间的权值和。那么首先就要知道如......
  • Summer Pokemon
    SummerPokemon想认识一下这位朋友QWQSolution以下规定:\(n,m\)为原题中\(n,m\),\(x\)表示一次对决的判定轮数。\(a,b\)为长度为\(x\)的单增数组(具体意义见下),\(|a\cupb|=2x,a\cupb=\{1,2,\dots,2x\}\)。算法一我会爆搜!测试点\(2\)启发你,你只需要求......
  • Namomo Summer Camp 23 Day 1(GCPC2021)
    NamomoSummerCamp23Day1(GCPC2021)ProblemB:BrexitingandBrentering签到#include<bits/stdc++.h>usingi64=longlong;usingnamespacestd;typedefpair<i64,i64>PII;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr)......
  • UESTC 2023 Summer Training #23 for div2/2022-2023 ACM-ICPC Latin American Region
    Preface今天这场签到巨多,和昨天那场形成了鲜明的对比但可惜后盘的时候我划了太久的水,最后接了B题然后没调出来成为战俘最气的是赛后发现原来是没注意输出格式,本来可以说一遍过的题结果没写过,属实可惜,就当长教训了以后一定要尤其注意输入输出格式A.AskingforMoneyORZ徐......
  • SMU Summer 2023 Contest Round 9(2019 山东省大学生程序设计竞赛)
    2019山东省大学生程序设计竞赛A.Calandar纯模拟吧(感觉我做麻烦了(?),就是如果问的是未来的日期,就用相隔天数取模后加上这天的星期,如果问的是曾经的,就用这天的星期减去相隔天数的取模后的数,因为是减法,记得加模数#include<bits/stdc++.h>#defineintlonglong#defi......
  • SMU Summer 2023 Contest Round 6
    Problem-D.NumberOfPermutations传送门容斥原理思路:利用容斥,首先所有可能的排列肯定是fac[n],然后可能会有三种bad的情况:①第一个元素的排列是非递减②第二种是第二个元素的排列是非递减③这两个可能出现的重叠情况,意思就是说同时导致①②成立这个时候我们利用容斥......
  • SMU Summer 2023 Contest Round 1
    Problem-ATheContest(纯属眼瞎)#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e7+50,M=5050,mod=9901,MAX_N=1e3+50,INF=0x3f3f3f3f;constdoublePI=3.1415926;#defineIOSios_base::sync_with_stdio(f......