首页 > 其他分享 >2022ICPC南京站D

2022ICPC南京站D

时间:2023-09-10 22:12:23浏览次数:37  
标签:南京站 cnt int mid long else num 2022ICPC

1:题意

给你一个序列要求你进行一次操作,选一个位置i从他开始往后加数直到加到第i+m-1个,加的值成等差求操作完后的第k大的数

2:思路

1):二分答案

二分找到第k大的值

2):差分

check里面,枚举每一个数看他是否大于mid,记录为num,小于的判断他是否+等差最后一位小于mid,小于直接跳过,大于则判断他可以在那一个位置,然后把他这个区间表示出来,即贡献度,再前缀和一下就可以了

代码

点击查看代码
#include <bits/stdc++.h>

using namespace std;

#define int long long
const int N = 1e6 + 10;
typedef long long ll;
int a[N];
int n,m,k,c,d;
bool check(int mid)
{
	vector<int>f(n+2,0);
	int num = 0;
	for(int i = 1;i <= n;i ++)
	{
		if(a[i] >= mid)
		num++;
		else if(a[i] + c + d*(m-1) < mid )
		continue;
		else
		{
			int cnt = 0;
			if(d)
			{
				int tmp = a[i]+c;
				cnt = (mid - tmp + d - 1)/d;
				cnt = max(0LL,cnt);
			}
			f[max(0LL,(i-m+1))]++;
			f[min(n+1,max(0LL,i - cnt+1))]--;
		}
	}
	
	int mx = 0;
	for(int i = 1;i <= n;i ++)
	{
		f[i] += f[i-1];
		mx = max(mx,f[i]);
	}
	if(mx + num >= k)
	return true;
	else
	return false;
}

void solve()
{
	cin >> n >> k >> m >> c >> d;
	
	for(int i = 1;i <= n;i ++)
	cin >> a[i];
	
	int l = 0,r = 1e18;
	while(l < r)
	{
		int mid = (l+r+1)/2;
		if(check(mid))
		l = mid;
		else 
		r = mid - 1;
		
		//cout << l << ' ' << r << '\n';
	}
	
	cout << l << '\n';
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	solve();
}

标签:南京站,cnt,int,mid,long,else,num,2022ICPC
From: https://www.cnblogs.com/ljmxmu/p/17692104.html

相关文章

  • “赛意力量&SNP”南京站深探智改数转新境界 精典回顾
    7月28日,“赛意力量·全国行”来到中国科技的创新中心之一,同样也是专精特新“小巨人”成林的城市——江苏南京,以“芯片”为纽带,聚焦高科技企业未来发展的大方向,带领嘉宾深度挖掘智改数转领域的新思考与新路径。通过沙龙主题演讲与现场问答等深入互动,解析前沿资讯,总结实战经验,从而洞......
  • 2022ICPC南京站 B. Ropeway
    也许更好的阅读体验\(\mathcal{Description}\)\(n+2\)个点编号\(0~n+1\),每个点有点权,要求选若干个点使得总点权最小,其中编号为\(0\)和\(n+1\)的点必须选且点权为\(0\),同时满足任意两个被选的点之间的距离不超过\(k\),此外还会给一个\(01\)串,表示\(1~n\)这些点是否为必选的点现在会......
  • 2022ICPC杭州站 A (裴蜀 + 扩欧)
    题目链接:A题意:给定一个序列\(a\),让序列加上一个等差序列,求出总和%$m$的最小值以及等差序列的\(s\)和公差\(d\)。思路:定义\(a\)序列总和为sum。则求解的答案为\((sum+n∗s+n∗(n+1)2∗d)\)%m的最小值。根据裴蜀定理得到原式等于\(sum+x∗gcd(n,n∗(n+1)/2)+y......
  • 2022icpc ec-final 游了记
    目录3.23day-13.24day03.25day13.26day23.27day3承上NOI2021退役记(密码123456):https://www.cnblogs.com/gmh77/p/15079696.html老年人的大学生活3.23day-1下午鸽......
  • 2022icpc 南京
    G.Inscryption贪心回溯在题目中0可以变成策略1,也可以变成策略2,但策略2是比策略1更加优秀的策略,所以当遇到0时能变成策略2就变成策略2,但是变成策略2可能会让后面的决策......
  • ICPC2022南京站游记
    第二次打南京了,去年是在南京拿的第一块铜(上海太卷了打了次铁)Day0南京站的热身赛真就万年不变,一直用那套袋鼠题。Day1开局我直接先敲板子,试图跟榜秒杀签到题,不久后\(I\)......
  • 2022icpc杭州铜牌题题解
    A.ModuloRuinstheLegend\[求s、d,使\suma_i+sn+d\frac{n(n+1)}{2}\(\bmodm)最小\\设sum=\suma_i\(\bmodm),t=gcd(n,\frac{n(n+1)}{2})\\原式=sum+kt\(\bm......
  • 2022icpc杭州(The 2022 ICPC Asia Hangzhou Regional Programming Contest)
    链接:https://codeforces.com/gym/104090A.ModuloRuinstheLegend#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;i64exgcd(i64a,i64b,......
  • 2022icpc西安(The 2022 ICPC Asia Xian Regional Contest)
    C#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;voidsolve(){i64a,b,c;cin>>a>>b>>c;i64tmp=1;i64ans=c*b;......
  • 2021icpc(银川)B (2022icpc沈阳热身赛) The Great Wall
    题意:给你一个长度为n的序列。对于每一个k,k∈[1,n].问你将其分成k个段,每个段的贡献为该段最大值-最小值。贡献总和最大值是多少.n≤1e3分析:很好写出一个朴素的dpdp[i......