试题链接

题意:

求出一个1到n的排列,这个排列只告诉了你从第二个数字开始的比这个数字小的数的个数。

题解:

如果一个数p,p的前面有m个比他小的数,后面有n个比他小的数,那p的位置就是n+m+1
我们可以二分这个p,如果m+n+1>mid,mid就取小了;否则就取大了
p前面有多少比他小的数,在输入答案时就知道了
p后面有多少比他小的数,可以用树状数组来搞定
我们在处理时应该倒序处理,想想最后一个数的真实值就是a[n]+1,然后删除最后一个数,看倒数第二个,一次类推即可

代码:

# include<cstdio>
# include<iostream>
# include<fstream>
# include<algorithm>
# include<functional>
# include<cstring>
# include<string>
# include<cstdlib>
# include<iomanip>
# include<numeric>
# include<cctype>
# include<cmath>
# include<ctime>
# include<queue>
# include<stack>
# include<list>
# include<set>
# include<map>using namespace std;const double PI=4.0*atan(1.0);typedef long long LL;
typedef unsigned long long ULL;# define inf 999999999
# define MAX 8000+4int a[MAX];
int ans[MAX];
int tree[MAX];int n;
int lowbit(int x)
{return x&(-x);
}
int getsum ( int pos )//后面比他小的数字的个数
{int ans = 0;while ( pos > 0 ){ans+=tree[pos];pos-=lowbit(pos);}return ans;
}void update ( int pos,int val )
{while ( pos <= n ){tree[pos]+=val;pos+=lowbit(pos);}
}int my_search ( int k )
{int left = 1, right = n;while ( left < right ){int mid = ( left+right )>>1;int num = getsum (mid);if ( mid - 1 < num+k ){left = mid+1;}else{right = mid;}}return left;
}int main(void)
{while ( scanf("%d",&n)!=EOF ){memset(tree,0,sizeof(tree));memset(ans,0,sizeof(ans));a[1] = 0;for ( int i = 2;i <= n;i++ )scanf("%d",&a[i]);for ( int i = n;i >= 1;i-- ){int k = my_search(a[i]);update(k,1);//每确定一个位置,进行更新 ans[i] = k;}for ( int i = 1;i <= n;i++ )printf("%d\n",ans[i]);}return 0;
}

Lost Cows(树状数组)相关推荐

  1. POJ 2182 Lost Cows [树状数组+二分]

    Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular di ...

  2. POJ 2481 Cows POJ 2352 Stars(树状数组妙用)

    题目链接:POJ 2481 Cows POJ 2352 Stars 发现这两个题目都跟求逆序数有着异曲同工之妙,通过向树状数组中插入点的位置,赋值为1,或者++,然后通过求和来判断比当前 点 &quo ...

  3. 树状数组c语言模板,【树状数组】Cows (POJ2481) PASCAL 解题报告

    [树状数组]Cows (POJ2481) Time Limit:1000MS Memory Limit:65536K Total Submit:16 Accepted:8 Description [问 ...

  4. POJ2182 HDU2711 Lost Cows【树状数组+线段树】

    Lost Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17113 Accepted: 10664 Descripti ...

  5. 2021.8.14【提高B组模拟6】T3 + P7527 [USACO21OPEN] United Cows of Farmer John (树状数组)

    United Cows of Farmer John 题目传送门 解题思路 树状数组乱糊 AC代码 #include<cstdio> #include<cstring> usi ...

  6. Cows(树状数组)

    ​​​k树状数组简单易懂的详解_FlushHip的博客-CSDN博客_树状数组 可以参考以上文章先行理解树状数组. 描述: Farmer John's cows have discovered tha ...

  7. POJ2182 Lost Cows(树状数组、二分、倍增)

    Lost Cows 题目链接 Description N (2 <= N <= 8,000) cows have unique brands in the range 1-N. In a ...

  8. POJ 2483 Cows(树状数组)

    题目链接 题意 给出N个区间,求大于改区间的数目 AC 按照右区间降序排列,这样可以保证下一个区间的右端点小,这样树状数组就可以重复利用.树状数组存放的是以当前左区间到右区间一共有几个比自己大的区间, ...

  9. POJ2182-Lost Cows【树状数组,二分】

    正题 题目链接:http://poj.org/problem?id=2182 题目大意 给出每头牛前面有多少个比它高的,求每头牛的最大高度. 解题思路 建立一个01序列,表示每个高度是否被占用过,然后 ...

最新文章

  1. 出门问问工程副总裁黄美玉入选IEEE Fellow,曾担任微软Cortana首席NLP科学家
  2. shell脚本中echo显示内容带颜色的实现方法
  3. Java加密解密入门
  4. ProxySQL 监控和统计
  5. 回调函数自定义传参_10分钟教你手写8个常用的自定义hooks
  6. 牛客 - 完全图(二分)
  7. java 按键消息监听器用法,Java命令行中的键监听器
  8. apache+php+mysql+phpadmin 服务环境搭建
  9. dj鲜生-用户中心-历史购物
  10. 【蓝桥杯嵌入式】【STM32】13_PWM输入捕获模式
  11. jQuery hover事件
  12. jmeter_linux下运行
  13. 人人都是产品经理 笔记
  14. 【引用】MySQL定时任务
  15. NekoHtml 乱码出现问号的解决
  16. raw data/PF data/Q30 data/clean data的不同
  17. 电视android怎么连接手机助手下载,投屏助手app下载 投屏助手(手机投屏到电视) for Android v2.0 安卓版 下载-脚本之家...
  18. 知乎,挣钱?果然具有长尾效应
  19. Greedy Algorithm
  20. 广告SDK平台中的CPA、CPS、CPM、CPT、CPC 是什么

热门文章

  1. 你这么爱听歌,一定活得很难过吧 | 今日最佳
  2. 原来这些行业的“潜规则”是这样的...
  3. sklearn集合算法预测泰坦尼克号幸存者
  4. php prettyprinter,gdb运行时错误:prettyprinter已注册:libstdc++v6
  5. android自动登录不过登陆界面,【教程】Android 记住密码和自动登录界面的实现
  6. java .this的用法_JAVA中this用法小结
  7. java 支付宝 退款_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝支付)
  8. oracle 如何筛选重复,求sql--筛选A字段相同,B字段不同且不重复的记录
  9. 程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)
  10. tableau三轴合并_《Tableau数据可视化实战》——1.12节合并不同数据源-阿里云开发者社区...