首页 > 其他分享 >CF1260E Tournament 题解

CF1260E Tournament 题解

时间:2023-05-05 18:56:26浏览次数:49  
标签:pq int 题解 Tournament long CF1260E 编号 贿赂 define

妙妙题,但是感觉评不到紫。

题目链接

题意

luogu 题意。

有 \(n\) 个人,贿赂第 \(i\) 个人的代价为 \(a_i\)。这些人中,贿赂代价为 \(-1\) 的是你的朋友。现在,你可以两两配对,使得编号小的被淘汰,但是,如果你贿赂了编号大的,那么编号大的被淘汰,而编号小的留下。问:使得你朋友夺得冠军的最小代价。

题解

如果你的朋友不是第 \(n\) 个人,则必然要贿赂第 \(n\) 个人。

此时若你的朋友编号 \(\ge \frac{n}{2}\),则完成。否则需要取 \(\frac{n}{2}\sim n-1\) 的最小贿赂代价。

容易发现规律,即每 \(2^k\) 分一段,每一段取 \(a_i\) 最小值,直到 \(a_i=-1\) 停止。

时间复杂度 \(O(n)\)。

总结

巨大妙妙。但是手算一下应该不难看出。

代码

#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define sz(x) (int)x.size()
#define ll long long
#define pii pair<int,int>
using namespace std;
inline void chmin(int &x,int y){x=min(x,y);}
inline void chmax(int &x,int y){x=max(x,y);}
const int N=(1<<18)+5;
int n;
ll a[N];
priority_queue<ll,vector<ll>,greater<ll>> pq;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%lld",a+i);
	ll ans=0;
	for(int i=n;i>=1;i--){
		if(a[i]==-1) break;
		pq.push(a[i]);
		if(__builtin_popcount(i)==1){
			ans+=pq.top();
			pq.pop();
		}
	}
	printf("%lld\n",ans);
	return 0;
}
/*
Basic:
1. int or long long?
2. freopen?
3. memory limits?
Advanced:
1. use more functions
2. write carefully and check
3. think twice before writing
4. debug quickly
5. never copy others' codes
*/

标签:pq,int,题解,Tournament,long,CF1260E,编号,贿赂,define
From: https://www.cnblogs.com/Jerry-Jiang/p/CF1260E.html

相关文章

  • django迁移数据库错误问题解决
    删除所有的pyc文件,迁移文件然后重新运行python3manage.pymakemigrationsdjango.db.utils.InternalError:(1060,"Duplicatecolumnname'addr_id'")运行python3manage.pymigrate--fake然后重新运行python3manage.pymigrate成功!......
  • ABC269F 题解
    前言题目传送门!更好的阅读体验?题解区的方法思维难度都过大(?),提供一种极其容易的方法。思路题目就是求\(\sum\limits_{i=x_1}^{x_2}\sum\limits_{j=y_1}^{y_2}a_{i,j}\)。所以很容易想到先算\(\sum\limits_{j=y_1}^{y_2}a_{i,j}\)。这个并不困难:如果\(i\)是奇数,那一行应......
  • LeetCode 27. 移除元素 题解
    题目链接:LeetCode27.移除元素本题大意是要对一个数组进行原地删除数值等于val的元素。双指针算法:通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。快指针(p指针):寻找新数组的元素,新数组就是不含有目标元素的数组慢指针(q指针):指向更新新数组下标的位置当......
  • LeetCode 704. 二分查找 题解
    本题考查的就是一个基本的整数二分查找问题对于整数二分,有单调性一定可以二分,没有单调性的有时候也可以二分。算法思想(分为两种方法):查找结果是在左边区间的情况区间被划分为[l,mid]和[mid+1,r]1、确定分界点,mid=q[(l+r)/2]2、判断是否满足是:区间变成[l,mid]因此:r=mid否......
  • 洛谷P4824题解
    题面题意:给出字符串s和t,每次操作将s中出现的第一个t删去,直到不能删为止。求最后的串。|s|<=1e6题解:hash做法。(此题也有kmp和权值线段树做法)因为涉及到删除操作,所以我们要动态的实现这个过程。所以考虑开一个栈来存储当前留下的字符。然后每有一个字符入栈,就拿当前......
  • Linux IMX6ULL RTC掉电不保存问题解决
    背景:公司临时派发的小任务,解决项目中RTC实时时钟的问题,在为解决这个问题之前,项目的实时时钟老是一断电重启就会出现出现恢复到一个固定的时间。琢磨了许久,终于解决了,特此记录一下,给读者如遇到相关问题提供一下思路拓展。平台:imx6ull开发板加Linux系统。解决步骤:1.删除Linux......
  • CWOI 2023.05.04 题解
    mzx的动态规划杂题选讲。stoARC153D-SumofSumofDigitsP7152[USACO20DEC]BovineGeneticsGCF1542E2AbnormalPermutationPairs(hardversion)题意给定\(n,m\),求有多少对长度为\(n\)的排列\(p,q\),满足以下条件:\(p\)的字典序小于\(q\);\(p\)的逆序对......
  • 洛谷P7469题解
    题面题意:有两个字符串a和b,问b中有多少个本质不同子串可以由a删除若干个字符得到。|a|,|b|<=3000题解:字典树(这个题做法很多,后补)。把字符串b的每个子串打到字典树上。然后因为3000^2*26这个东西比较大,所以不能用nxt[id][26]来存储,于是使用链式前向星存图,这样tri......
  • 问题解答 | FMCW TDMA-MIMO毫米波雷达信号处理仿真
    本文编辑:@调皮连续波,保持关注调皮哥,获得更多雷达学习资料和建议!大家好,我是调皮哥,今天继续给大家分享干货,助力大家轻松、快乐、有方向地学习雷达。之前分享的文章:雷达仿真|FMCWTDMA-MIMO毫米波雷达信号处理仿真(可修改为DDMA-MIMO)当中,存在几个小问题(bug),具体如下:第十节:多普勒补偿”......
  • 关于容斥原理 / P5505题解
    发现很多题解连容斥原理的“钦定”和“至少”的区别都讲不清楚,误导萌新,所以写一下这两个东西的区别“钦定”这个东西是会算重的,而“至少”不会。举个例子吧,比如\(1\2\3\)三个位置不合法,如果我说“钦定”两个位置不合法,那么这里计算方案的时候这个不合法的方案会被计算三次,分......