AcWing 244. 谜一样的牛|树状数组
题目描述
有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高。
现在这n头奶牛站成一列,已知第i头牛前面有Ai头牛比它低,求每头奶牛的身高。
输入格式
第1行:输入整数n。
第2..n行:每行输入一个整数Ai,第i行表示第i头牛前面有Ai头牛比它低。
(注意:因为第1头牛前面没有牛,所以并没有将它列出)
输出格式
输出包含n行,每行输出一个整数表示牛的身高。
第i行输出第i头牛的身高。
数据范围
1≤n≤105
输入样例:
5
1
2
1
0
输出样例:
2
4
5
3
1题解:如果最后一头牛前面有An头牛比它矮显然它的身高为An+1。如果倒数第二头牛前面有An-1头牛比它矮的话它的身高为1~n里面除了最后一头牛的身高以外第An-1+1大的值。以此类推我们知道第i头牛它的身高是1~n中除了第i+1到n以外的值中第Ai+1大的值。
我们可以建立一个长度为n的01序列,从n到1倒序找出第Ai+1个1的位置作为第i头牛的身高,然后将这个位置的1变为0。
我们可以用树状数组来维护前x个中有多少个1,先将每个位置都add(1),如果数量和Ai+1一样那么这个x就是第i头牛的身高,再将这个位置减去add(-1)。
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 2e9;
const int N = 1e5 + ;
int a[N],sum[N],ans[N];
int lowbit(int x) { return x&(-x);}
void add(int x,int y) {
for (;x<N;x+=lowbit(x)) sum[x]+=y;
}
int query(int x) {
int ans = ;
for (;x>;x-=lowbit(x)) ans += sum[x];
return ans;
}
int main() {
int n;
scanf("%d",&n);
a[] = ;
add(,);
for (int i = ; i <= n; i++) {
scanf("%d",&a[i]);
a[i]++;
add(i,);
}
for (int i = n; i > ; --i) {
int l = ,r = n,mid;
while (l<r) {
mid = (l+r)/;
if (query(mid) >= a[i]) r = mid;
else l = mid+;
}
ans[i] = l;
add(l,-);
}
for (int i = ; i <= n; i++)
printf("%d\n",ans[i]);
return ;
}
AcWing 244. 谜一样的牛|树状数组的更多相关文章
- AcWing    244. 谜一样的牛     (树状数组+二分)打卡
		题目:https://www.acwing.com/problem/content/245/ 题意:有n只牛,现在他们按一种顺序排好,现在知道每只牛前面有几只牛比自己低,牛的身高是1-n,现在求每只牛 ... 
- AcWing 244. 谜一样的牛
		有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高. 现在这n头奶牛站成一列,已知第i头牛前面有a头牛比它低,求每头奶牛的身高. #include<bits/stdc+ ... 
- AcWing:241. 楼兰图腾(树状数组逆序对)
		在完成了分配任务之后,西部314来到了楼兰古城的西部. 相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们分别用V和∧的形状来代表各自 ... 
- AcWing    260. 买票     (树状数组+二分)打卡
		题目:https://www.acwing.com/problem/content/description/262/ 题意:给定一个队伍,每个人过来的时候可以插队,每个人会输入一个插入到哪个位置,但是 ... 
- AcWing:244. 谜一样的牛(树状数组 + 二分)
		有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高. 现在这n头奶牛站成一列,已知第i头牛前面有AiAi头牛比它低,求每头奶牛的身高. 输入格式 第1行:输入整数n. 第2. ... 
- acwing 243. 一个简单的整数问题2  树状数组  线段树
		地址 https://www.acwing.com/problem/content/description/244/ 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l ... 
- 牛客练习赛38 D 题 出题人的手环 (离散化+树状数组求逆序对+前缀和)
		链接:https://ac.nowcoder.com/acm/contest/358/D来源:牛客网 出题人的手环 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ... 
- 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)
		链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ... 
- 2018牛客网暑期ACM多校训练营(第二场)J Farm(树状数组)
		题意 n*m的农场有若干种不同种类作物,如果作物接受了不同种类的肥料就会枯萎.现在进行t次施肥,每次对一个矩形区域施某种类的肥料.问最后枯萎的作物是多少. 分析 作者:xseventh链接:https ... 
随机推荐
- hdu 2225 The nearest fraction (数学题)
			Problem - 2225 一道简单数学题,要求求出一个分母不超过m的最接近sqrt(n)的分数. 做法就是暴力枚举,注意中间过程不能用浮点数比较,误差要求比较高. 代码如下: #include & ... 
- H3C 帧中继与水平分割
- H3C CHAP验证
- 2019-8-15-win10-edge-打开闪退问题
			title author date CreateTime categories win10 edge 打开闪退问题 lindexi 2019-08-15 08:53:22 +0800 2019-8-1 ... 
- centos7.0 可以访问HTML文件,不能访问PHP文件,因为php-fpm没有扩展包
			解决方法 :https://blog.csdn.net/ityang_/article/details/53980190 nginx调用PHP有sock方式和端口方式 1.确认nginx已经调用了ph ... 
- Vue  项目构建完成 ----发布项目
			发布项目 cmd 命令行 npm run build 执行打包文件 完成后就会有 3 个文件夹 分别是: 文件夹 :build config dist in ... 
- JavaScript数据类型总结
			1. 六种简单数据类型:Undefined.Null.Boolean.Number.String.Symbol(新增): 一种复杂数据类型:Object: (1)基本数据类型保存在栈内存中,是按值传 ... 
- 开源项目使用 appveyor 自动构建
			我写了几个开源项目,我想要有小伙伴提交的时候自动运行单元测试,自动运行编译,这样可以保证小伙伴提交清真的代码 本文将会告诉大家如何接入 appveyor 自动构建方案,在 Github 上给自己的开源 ... 
- linux 快速和慢速处理
			老版本的 Linux 内核尽了很大努力来区分"快速"和"慢速"中断. 快速中断是那些能够很 快处理的, 而处理慢速中断要特别地长一些. 慢速中断可能十分苛求处理 ... 
- SpringSecurity 自定义用户 角色 资源权限控制
			SpringSecurity 自定义用户 角色 资源权限控制 package com.joyen.learning.security; import java.sql.ResultSet; impor ... 
