poj2182
首先容易知道,最后一个数是最容易确定的,于是从后往前确定
对于位置j,它的数就是1~n中剩余数的第a[j]+1小的数
这当然可以用平衡数做,复杂度为O(nlogn)
有没有更简洁得算法?树状数组+二分
var v:array[..] of boolean;
c,ans,a:array[..] of longint;
i,j,n:longint;
function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; function sum(x:longint):longint;
begin
sum:=;
while x> do
begin
sum:=sum+c[x];
x:=x-lowbit(x);
end;
end; function kth(t:longint):longint;
var l,r,m,p:longint;
begin
l:=;
r:=n;
while l<=r do
begin
m:=(l+r) shr ;
p:=sum(m); //统计二分得到的这个数前面有几个比它小的
if (p=t) and not v[m] then exit(m); //注意不要忘记判断这个数是否存在
if p<t then l:=m+ else r:=m-;
end;
end; procedure add(x,w:longint);
begin
while x<=n do
begin
c[x]:=c[x]+w;
x:=x+lowbit(x);
end;
end; begin
readln(n);
for i:= to n do
readln(a[i]);
for i:= to n do //初始化
add(i,);
fillchar(v,sizeof(v),false);
for i:=n downto do
begin
ans[i]:=kth(a[i]+); //确定当前位置
v[ans[i]]:=true; //删除这个数
add(ans[i],-);
end;
for i:= to n do
writeln(ans[i]);
end.
总的复杂度为O(n*logn*logn)虽然慢了一点,但是编程复杂度大大下降
poj2182的更多相关文章
- poj2182(线段树求序列第k小)
题目链接:https://vjudge.net/problem/POJ-2182 题意:有n头牛,从1..n编号,乱序排成一列,给出第2..n个牛其前面有多少比它编号小的个数,记为a[i],求该序列的 ...
- 【POJ2182】Lost Cows
[POJ2182]Lost Cows 题面 vjudge 题解 从后往前做 每扫到一个点\(i\)以及比前面小的有\(a[i]\)个数 就是查询当前的第\(a[i]+1\)小 然后查询完将这个数删掉 ...
- 【poj2182】【poj2828】树状数组/线段树经典模型:逆序查找-空位插入法
poj2182题意:有一个1~n的排列,现在给定每个人前面有多少个人的编号比他大,求这个排列是什么.n<=8000 poj2182题解: 逆序做,可以确定二分最后一个是什么,然后删除这个数.树状 ...
- POJ2182题解——线段树
POJ2182题解——线段树 2019-12-20 by juruoOIer 1.线段树简介(来源:百度百科) 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线 ...
- POJ2182 Lost Cows 题解
POJ2182 Lost Cows 题解 描述 有\(N\)(\(2 <= N <= 8,000\))头母牛,每头母牛有自己的独一无二编号(\(1..N\)). 现在\(N\)头母牛站成一 ...
- [poj2182] Lost Cows (线段树)
线段树 Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacula ...
- ACM/ICPC 之 数据结构-线段树思想(POJ2182,含O(n^2)插入式解法)
这道题在一定程度上体现了线段树的一种用法,解决的问题是:对于总计n个元素的第i个元素,已知其在[1,i]上部分序列的排名,求第i个元素在所有n个元素中的排名. 当然这道题数据比较水,所以用O(n^2) ...
- Lost Cows(线段树 POJ2182)
Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10354 Accepted: 6631 Descriptio ...
- [POJ2182]Lost Cows(树状数组,二分)
题目链接:http://poj.org/problem?id=2182 题意:给定1~n个数和n个位置,已知ai表示第i个位置前有ai个数比当前位置的数小,求这个排列. 和刚才YY的题意蛮接近的,用树 ...
随机推荐
- SQL Server 2000 “用户XX已经存在” 处理方法
-- 目前遇到这个问题都是在切换服务器时发生的. 旧服务器备份的数据库还原到新服务器,都会遇到这种问题 --切决方案如下: -- 查找孤立用户列表 EXECUTE sp_change_users_lo ...
- ACM俱乐部 字符串
数制转换分数: 2 时间限制:1 秒 内存限制:32 兆 特殊判题: 否 提交:59 解决: 24 标签 进制转换 题目描述 求任意两个不同进制非负整数的转换(2进制-16进制),所给整数在long所 ...
- windows 与fedora时间差
windows 默认BIOS时间当前时间UTC+时区, 按北京时间时区,就是要加8个小时. Linux默认BIOS时间是UTC时间,所以同一机子上装WINDOWS与LINUX时间上会差8个小时.这问题 ...
- go语言使用redis —— redigo
redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo.选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了. redis.go.red ...
- iOS7.1Https企业证书发布方法
openssl使用的是macos系统自带的版本,关键点是不同直接使用ios设备打开https的链接,需要将证书发到系统的mail里,安装到设备, 如果命令执行不成功,用sudo执行. 1.生成服务器的 ...
- HTML 菜单 a 标签跳转本页面并追加参数
代码如下: <!-- BEGIN 追加URL的参数 --> <script type="text/javascript"> function setUrl( ...
- willMoveToParentViewController 与 didMoveToParentViewController
在iOS 5.0以前,我们在一个UIViewController中这样组织相关的UIView 在以前,一个UIViewController的View可能有很多小的子view.这些子view很多时候被盖 ...
- main函数(本文较老,仅作参考)
Xcode4.2之前的main函数如下: int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePoo ...
- Java中怎样判断一个字符串是否是数字?
1:正则表达式 public static void main(String[] args) { String str = "123456456456456456"; boolea ...
- 1185: [HNOI2007]最小矩形覆盖 - BZOJ
就是一道凸包(枚举凸包的边作为矩形的一条边)的裸题,只是不太好打,所以犹豫到今天才打 不说了,说起AC都是泪啊,因为没有精度判断,没有判重(算距离时除0了)错了好久 拍了好久都和标称是一样的,因为 ...