【bzoj5170】Fable(树状数组)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5170
我们会发现,经过一轮冒泡后,若a[i]的前面有比它大的数,就一定会有一个被丢到后面去,即a[i]会前移一位。而那些前面没有能被丢的数,它们是按照顺序从小到大排序好的。于是我们可以用树状数组处理出在他前面比他大的数个数>=k的数先插到前移k位的位置上,然后剩下的数从小到大插进空位。
代码:
![](/assets/blank.gif)
![](/assets/blank.gif)
#include<cstdio> #include<algorithm> #define ll long long #define maxn 200010 ll read() {ll x=0; char f=1,c=getchar();for(;c<'0'||'9'<c;c=getchar())f=(c=='-'?0:f);for(;'0'<=c&&c<='9';c=getchar())x=x*10+c-'0';return f?x:-x; } using namespace std; int bit[maxn]; struct data{int x,id; }a[maxn]; int rk[maxn],f[maxn],ans[maxn]; int n,k; bool cmp(data a,data b){return a.x<b.x;} void add(int x,int k){for(;x<=n;x+=x&(-x))bit[x]+=k;} int getsum(int x){int sum=0; for(;x;x-=x&(-x))sum+=bit[x]; return sum;} int main() {n=read(); k=read();for(int i=1;i<=n;i++)a[i].x=read(),a[i].id=i;sort(a+1,a+n+1,cmp); // for(int i=1;i<=n;i++) // printf("%d %d %d\n",i,a[i].x,a[i].id);rk[a[1].id]=1;for(int i=2;i<=n;i++)if(a[i].x==a[i-1].x)rk[a[i].id]=rk[a[i-1].id];else rk[a[i].id]=i;for(int i=1;i<=n;i++){add(rk[i],1);f[i]=getsum(n)-getsum(rk[i]);if(f[i]>k)ans[i-k]=a[rk[i]].x;}int tmp=1;for(int i=1;i<=n;i++)if(f[a[i].id]<=k){while(tmp<=n&&ans[tmp])++tmp;ans[tmp]=a[i].x;}for(int i=1;i<=n;i++)printf("%d\n",ans[i]); // for(int i=1;i<=n;i++) // printf("%d %d %d\n",i,rk[i],f[i]); }
bzoj5170
转载于:https://www.cnblogs.com/quzhizhou/p/9735864.html
【bzoj5170】Fable(树状数组)相关推荐
- BZOJ5170: Fable 树状数组
Description 有这么一则传闻,O(nlogn)的排序发明之前,滋滋国的排序都是采用的冒泡排序.即使是冒泡排序,对当时的国民 来说也太复杂太难以理解,于是滋滋国出现了这样一个职业--排序使,收 ...
- 洛谷 P5057 [CQOI2006]简单题(树状数组)
嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...
- Color the ball(HDU1556)树状数组
每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
- Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...
- poj_3067 树状数组
题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...
- hdu 1166 敌兵布阵(树状数组)
题意:区间和 思路:树状数组 #include<iostream> #include<stdio.h> #include<string.h> using names ...
- Equalizing Two Strings 冒泡排序or树状数组
首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...
- Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...
最新文章
- 关于javascript数据存储机制的一个案例。
- 解决nginx 504 Gateway Time-out的一些方法
- 手写自己的MyBatis框架-Executor
- php require persion denied,php,nginx_php+nginx配置权限问题(13: Permission denied),php,nginx - phpStudy...
- web.py框架入门
- zabbix4.0 mysql本地数据库迁移到腾讯云数据库
- MYSQL语句和多表查询
- bootstraptable查看详情_bootstrap table detailView详情视图树形模式
- ad10搜索快捷键_ad快捷键有哪些 ad快捷键汇总
- 浅谈LANG_ISO 639-1世界语言列表检索
- 励志: 我们来看看那些优秀的人的眼界和思想
- Android 发布代码到github 并且部署到 JitPack maven 仓库详细步骤
- 动态活体检测 | 算法分析
- 嵌入式 linux下proc目录下的文件详解
- 微信小程序页面上下滚动、左右滑动(二)
- 广东省乡村快递寄件数据分析-快递100百递指数
- 两分钟,告诉你如何提升棋牌游戏创业成功率
- 【技术】如何用触摸屏控制变频器?
- 巴旦木树苗种植经历了几个周期?
- 刘云浩博士报告_年青人 追梦的感觉