poj 2182 Lost Cows 树状数组
来源:互联网 发布:软件系统需求分析报告 编辑:程序博客网 时间:2024/04/30 09:50
传送门
题目大意:
有n头牛1~n乱序排列,给出2~n的位置上的a[i]代表i前面有a[i]头牛的编号比它小,输出每个位置上的牛的编号
分析:
从第n个位置开始逆序二分查找当前位置的编号,用树状数组来维护每头牛前面有多少头牛,(初始时每个位置都有牛,也就是都是1)每次查到当前位置应该是ans时,把ans位置改为0,然后修改维护新的数组
代码如下:
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn=8000+5;int n,a[maxn],tr[maxn],ans[maxn],vis[maxn];void add(int x,int y){ for(;x<=n;x+=x&(-x)) tr[x]+=y;}int query(int x){ int sum=0; for(;x;x-=x&(-x)) sum+=tr[x]; return sum;}signed main(void){ scanf("%d",&n); a[1]=0; for(int i=2;i<=n;i++) add(i,1),scanf("%d",&a[i]); memset(vis,0,sizeof(vis)); for(int i=n;i>=2;i--){ int l=1,r=n; while(l<r){ int mid=(l+r)/2,lala=query(mid); if(lala<a[i]) l=mid+1; else r=mid; } ans[i]=l,vis[l]=1,add(l,-1); } for(int i=1;i<=n;i++) if(vis[i]!=1){ ans[1]=i; break; } for(int i=1;i<=n;i++) cout<<ans[i]<<endl; return 0;}----------by >o< neighthorn
1 0
- POJ 2182 Lost Cows 树状数组
- poj 2182 Lost Cows(树状数组)
- poj 2182 lost cows 树状数组,二分
- poj 2182 Lost Cows 树状数组
- poj 2182 Lost Cows 树状数组
- [POJ 2182] Lost Cows · 树状数组
- poj 2182 Lost Cows 树状数组
- POJ 2182 Lost Cows(树状数组)
- POJ 2182 Lost Cows树状数组
- POJ 2182 Lost Cows树状数组 *
- poj 2182 Lost Cows--树状数组+二分
- 【树状数组--思维】poj 2182 Lost Cows
- POJ 2182 Lost Cows(树状数组)
- POJ 2182 Lost Cows 线段树 or 树状数组
- POJ 2182 Lost Cows (树状数组 or 线段树)
- POJ 2182 Lost Cows(树状数组,暴力解法)
- POJ 2182 Lost Cows (树状数组,递推)
- POJ 题目2182 Lost Cows(树状数组+二分)
- jqGrid及普通表格的生成和使用
- 关于 STM32 SPI 从机模式的问题
- 操作系统读书笔记(1)
- 二叉树遍历
- onvif框架生成
- poj 2182 Lost Cows 树状数组
- C++数据类型转换成C#
- 错误!!!和warning
- 初学者用python解析xml遇到的几个坑
- 7.2 简单线性回归应用
- Android 性能优化典范
- 大数据学习课程分享
- 通过ajax 跨域访问asp.net webapi
- 写代码时注意的几点