牛客练习赛87
1.牛客练习赛87
2.牛客小白月赛373.牛客IOI周赛28-普及组4.牛客竞赛数据结构专题班树状数组、线段树练习题5.小笨的蓄水池6.牛客周赛 Round 697.牛客周赛 Round 718.牛客周赛 Round 729.牛客周赛 Round 7310.2025牛客寒假算法基础集训营111.2025牛客寒假算法基础集训营212.2025牛客寒假算法基础集训营313.2025牛客寒假算法基础集训营414.2025牛客寒假算法基础集训营515.2025牛客寒假算法基础集训营616.牛客寒假训练营赛后总结17.牛客小白月赛11018.牛客周赛 Round 8219.牛客周赛 Round 84(选讲中位数
(考时脑壳抽了
思路其实很简单
容易知道最终序列长度为
如果不操作,最小的中位数,即为位置为
我们把删去的数全都往中位数右边的数加即可,中位数不变
的序列中位数最小值 就是位置
如果,原序列和即为所求
记得排序(
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int t;const int maxn=2e5+10;
int n,k;
int m[maxn];
int main(){
cin>>t;
while(t--){
cin>>n>>k;long long ans=0;
for(int i=1;i<=n;++i) cin>>m[i],ans+=m[i];
sort(m+1,m+1+n);
if(k==n-1) cout<<ans<<endl;
else cout<<m[(n-k+1)/2]<<endl;
}return 0;
}
k小数查询
怎么又没读懂题就在那里乱做(我是蒟蒻
给定的一个排列
又给定一个数,找出区间第小为
就是看区间内,有个数小于等于
根据题意,一定小于x这个数的位置,同理一定大于x这个数的位置
区间问题,又是静态,则可以考虑前缀和
设为前个小于的数量,那么我们就可以想到用sum来表示满足题意,即,这个区间内有个数小于等于
处理sum[]很好处理,只需要,令小于的数为1,大于的数为0,前缀和处理即可
但是根据,是两个端点都在动,暴力枚举直接TLE,考虑只枚举一个端点,
比如只枚举,我们稍微移项,,此时我们所需的即为sum[l-1]也就是sum[r]-k的个数,
所以统计出的数量,而,则枚举范围(因为一定有),建一个map统计即可
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
using namespace std;
#define int long long
int n;const int maxn=2e5+10;
int a[maxn];
map<int ,int >mp;
int x,k;
int pos;
int sum[maxn];
signed main(){
cin>>n>>x>>k;
for(int i=1;i<=n;++i) {
cin>>a[i];
if(a[i]==x) pos=i;
if(a[i]<=x) sum[i]=1+sum[i-1];
else sum[i]=sum[i-1];
}
for(int i=1;i<pos;++i) mp[sum[i]]++;
int ans=0;mp[0]++;
for(int i=pos;i<=n;++i) ans+=mp[sum[i]-k];
cout<<ans<<endl;
return 0;
}
ZFY AK IOI
本文作者:归游
本文链接:https://www.cnblogs.com/guiyou/p/15168466.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步