【bzoj5170】Fable(树状数组)
题目传送门: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=; char f=,c=getchar();
for(;c<''||''<c;c=getchar())f=(c=='-'?:f);
for(;''<=c&&c<='';c=getchar())x=x*+c-'';
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=; for(;x;x-=x&(-x))sum+=bit[x]; return sum;}
int main()
{
n=read(); k=read();
for(int i=;i<=n;i++)
a[i].x=read(),a[i].id=i;
sort(a+,a+n+,cmp);
// for(int i=1;i<=n;i++)
// printf("%d %d %d\n",i,a[i].x,a[i].id);
rk[a[].id]=;
for(int i=;i<=n;i++)
if(a[i].x==a[i-].x)rk[a[i].id]=rk[a[i-].id];
else rk[a[i].id]=i;
for(int i=;i<=n;i++){
add(rk[i],);
f[i]=getsum(n)-getsum(rk[i]);
if(f[i]>k)ans[i-k]=a[rk[i]].x;
}
int tmp=;
for(int i=;i<=n;i++)
if(f[a[i].id]<=k){
while(tmp<=n&&ans[tmp])++tmp;
ans[tmp]=a[i].x;
}
for(int i=;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
【bzoj5170】Fable(树状数组)的更多相关文章
- BZOJ5170: Fable 树状数组
Description 有这么一则传闻,O(nlogn)的排序发明之前,滋滋国的排序都是采用的冒泡排序.即使是冒泡排序,对当时的国民 来说也太复杂太难以理解,于是滋滋国出现了这样一个职业——排序使,收 ...
- BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]
1103: [POI2007]大都市meg Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2221 Solved: 1179[Submit][Sta ...
- bzoj1878--离线+树状数组
这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...
- codeforces 597C C. Subsequences(dp+树状数组)
题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
3529: [Sdoi2014]数表 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1399 Solved: 694[Submit][Status] ...
- BZOJ 3289: Mato的文件管理[莫队算法 树状数组]
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 2399 Solved: 988[Submit][Status][Di ...
- 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组
E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...
- 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序
3881: [Coci2015]Divljak Time Limit: 20 Sec Memory Limit: 768 MBSubmit: 508 Solved: 158[Submit][Sta ...
随机推荐
- vscode中的vue文件中emmet进行tab键不起作用
文件--首选项---设置 搜索: emmet.includeLanguages在右边修改 "emmet.triggerExpansionOnTab": true, "em ...
- PHP 允许Ajax跨域访问 (Access-Control-Allow-Origin)
Ajax访问php,报错 php顶部加上即可: header("Access-Control-Allow-Origin: *");
- eclipse中切换jdk版本
安装了jdk1.8,但是项目使用的是jdk1.7,需要更改eclipse中的jdk版本 右键项目propeties --- Project facets
- gradle多项目 svn依赖
当svn有多个子项目且没有根项目的时候,用eclipse拷贝下来是容易出问题的,经常子项目之间的依赖会有问题,还是推荐用IDEA. 操作说明: 如果SVN有 A,B,C,D四个项目,A为web项目,B ...
- 小程序开通微信支付 --- 微信商户平台绑定微信小程序APPID
首先情况是这样的:现有公司有个公众号,已经开通了微信支付(已经有一个商户平台),现在需要开发 微信小程序(也有微信支付),如果在小程序里面重新申请 微信支付,就显得比较麻烦.腾讯官方已经提供了 一个商 ...
- 微软官方:SELECT语句逻辑处理顺序
以下步骤显示SELECT 语句的逻辑处理顺序或绑定顺序.此顺序确定在一个步骤中定义的对象何时可用于后续步骤中的子句. 例如,如果查询处理器可以绑定到(访问)在FROM 子句中定义的表或视图,则这些对象 ...
- class表与student表之间的关系
1.班级表 2.学生表 3.student(学生表),Score(成绩表),course(课程表) 4.三张表联合查询 5.连接连个结果集(两个集合必须有相同的列数,列具有相同的数据类型,最 ...
- phpcms输出logo下拉实例
{pc:content action=" siteid="$siteid" order="listorder ASC"} {loop $data $k ...
- 基于JDK1.8的String源码学习笔记
String,可能是学习Java一上来就学习的,经常用,但是却往往只是一知半解,甚至API有时也得现查.所以还是老规矩,倒腾源码. 一.java doc 这次首先关注String的doc,因为其实作为 ...
- oracle通过profile限制用户的恶意登录和使用期限
用户profile口令管理 1,可以把profile想象成一个数据对象(文件,规则) 案例: 允许某用户,最多尝试登录3次,如3次未登录成功,则锁定该用户,锁定后两天不能登录系统 设置语法(syste ...