题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=5170

  我们会发现,经过一轮冒泡后,若a[i]的前面有比它大的数,就一定会有一个被丢到后面去,即a[i]会前移一位。而那些前面没有能被丢的数,它们是按照顺序从小到大排序好的。于是我们可以用树状数组处理出在他前面比他大的数个数>=k的数先插到前移k位的位置上,然后剩下的数从小到大插进空位。

  代码:

#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(树状数组)相关推荐

  1. BZOJ5170: Fable 树状数组

    Description 有这么一则传闻,O(nlogn)的排序发明之前,滋滋国的排序都是采用的冒泡排序.即使是冒泡排序,对当时的国民 来说也太复杂太难以理解,于是滋滋国出现了这样一个职业--排序使,收 ...

  2. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  3. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  4. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  5. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  6. poj_3067 树状数组

    题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...

  7. hdu 1166 敌兵布阵(树状数组)

    题意:区间和 思路:树状数组 #include<iostream> #include<stdio.h> #include<string.h> using names ...

  8. Equalizing Two Strings 冒泡排序or树状数组

    首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...

  9. Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组

    题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...

最新文章

  1. 关于javascript数据存储机制的一个案例。
  2. 解决nginx 504 Gateway Time-out的一些方法
  3. 手写自己的MyBatis框架-Executor
  4. php require persion denied,php,nginx_php+nginx配置权限问题(13: Permission denied),php,nginx - phpStudy...
  5. web.py框架入门
  6. zabbix4.0 mysql本地数据库迁移到腾讯云数据库
  7. MYSQL语句和多表查询
  8. bootstraptable查看详情_bootstrap table detailView详情视图树形模式
  9. ad10搜索快捷键_ad快捷键有哪些 ad快捷键汇总
  10. 浅谈LANG_ISO 639-1世界语言列表检索
  11. 励志: 我们来看看那些优秀的人的眼界和思想
  12. Android 发布代码到github 并且部署到 JitPack maven 仓库详细步骤
  13. 动态活体检测 | 算法分析
  14. 嵌入式 linux下proc目录下的文件详解
  15. 微信小程序页面上下滚动、左右滑动(二)
  16. 广东省乡村快递寄件数据分析-快递100百递指数
  17. 两分钟,告诉你如何提升棋牌游戏创业成功率
  18. 【技术】如何用触摸屏控制变频器?
  19. 巴旦木树苗种植经历了几个周期?
  20. 刘云浩博士报告_年青人 追梦的感觉

热门文章

  1. 最厉害的本事,往往是打好基本功
  2. 前端读取Excel文件(使用js-xls插件)
  3. SC60 Android 9.0 gt911 touch支持
  4. 在计算机使用获得外汇软件
  5. 平行泊车系统路径规划(4)
  6. nodejs事件和事件循环简介
  7. tomcat服务器经常报错PermGen Space
  8. 东华大学计算机学院调剂,东华大学硕士研究生调剂信息
  9. office 2013 快速换KEY
  10. 【Android】 一个crash 背后竟然暗藏玄机,速看!