博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2182,乱搞
阅读量:5010 次
发布时间:2019-06-12

本文共 2415 字,大约阅读时间需要 8 分钟。

D - Lost Cows
Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
Submit

Description

N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular display of poor judgment, they visited the neighborhood 'watering hole' and drank a few too many beers before dinner. When it was time to line up for their evening meal, they did not line up in the required ascending numerical order of their brands.
Regrettably, FJ does not have a way to sort them. Furthermore, he's not very good at observing problems. Instead of writing down each cow's brand, he determined a rather silly statistic: For each cow in line, he knows the number of cows that precede that cow in line that do, in fact, have smaller brands than that cow.
Given this data, tell FJ the exact ordering of the cows.

Input

* Line 1: A single integer, N
* Lines 2..N: These N-1 lines describe the number of cows that precede a given cow in line and have brands smaller than that cow. Of course, no cows precede the first cow in line, so she is not listed. Line 2 of the input describes the number of preceding cows whose brands are smaller than the cow in slot #2; line 3 describes the number of preceding cows whose brands are smaller than the cow in slot #3; and so on.

Output

* Lines 1..N: Each of the N lines of output tells the brand of a cow in line. Line #1 of the output tells the brand of the first cow in line; line 2 tells the brand of the second cow; and so on.

Sample Input

51210

Sample Output

24531
#include
#define N 8005using namespace std;struct NODE{ int l,r,num;}node[N<<2];int n,ocr[N];void build(int i,int left,int right){ node[i].l=left; node[i].r=right; node[i].num=right-left+1; if(right>left){ int mid=(right+left)>>1; i=i<<1; build(i,left,mid); build(i+1,mid+1,right); }}void findBrand(int i,int c,int j){ if(node[i].l==node[i].r){ node[i].num=0; ocr[j]=node[i].l; return; } node[i].num--; i=i<<1; if(node[i].num>=c) findBrand(i,c,j); else{ c-=node[i].num; findBrand(i+1,c,j); }}int main(){ int i; while(cin>>n){ build(1,1,n); for(i=1;i
>ocr[i]; for(i=n-1;i>-1;i--)findBrand(1,ocr[i]+1,i); for(i=0;i
<
<

 

转载于:https://www.cnblogs.com/ramanujan/p/3413043.html

你可能感兴趣的文章
HTML 【表单】
查看>>
poj2354Titanic(两点的球面距离)
查看>>
linux 开机启动脚本或者服务
查看>>
Web分析日志
查看>>
Data Lake Analytics + OSS数据文件格式处理大全
查看>>
SSO ---- 转载
查看>>
关于OnGlobalLayoutListener
查看>>
在winform里建立http链接和反序列化解析数据
查看>>
iOS 获取当前月份的天数(转)、
查看>>
android之自定义ViewGroup和自动换行的布局的实现(支持按钮间隔)
查看>>
Linux hrtimer分析(一)
查看>>
JavaScript if语句的限制
查看>>
[Bzoj1069][Scoi2007]最大土地面积(凸包)(旋转卡壳)
查看>>
[Bzoj4832][Lydsy2017年4月月赛]抵制克苏恩 (期望dp)
查看>>
poj1330 Nearest Common Ancestors
查看>>
Python学习笔记--装饰器
查看>>
On the structure of submodule of finitely generated module over PID
查看>>
Java基础复习(七)
查看>>
20个值得开发人员关注的jQuery技术博客
查看>>
适度的乐观与悲观都极有必要 —— 听近期逻辑思维有感
查看>>