题目链接

首先,题意比较清楚,给你n-1个数,表示从2到n,其中ai表示编号为i头牛所处位置的前面有几个的序号比他小。通过这些数据,让你输出这些牛的排列顺序。

思路:

对于最后的一头牛,他肯定是(an+1),通过这个规律,可以到这推出所有牛的顺序,你可以标记,然后暴力跑一边,但是效率不高。

这里,可以用线段树进行维护。

#include <map>
#include <set>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <iostream>
#include <stack>
#include <cmath>
#include <string>
#include <vector>
#include <cstdlib>
//#include <bits/stdc++.h>
//#define LOACL
#define space " "
using namespace std;
typedef long long LL;
typedef __int64 Int;
typedef pair<int, int> paii;
const int INF = 0x3f3f3f3f;
const double ESP = 1e-5;
const double PI = acos(-1.0);
const int MOD = 1e9 + 7;
const int MAXN = 8000*8000 + 10;
int n, ar[MAXN], ans[MAXN];
struct node {int l, r;int value;
} seg[MAXN];
void build_segm(int x, int lson, int rson) {seg[x].value = rson - lson + 1;seg[x].l = lson;seg[x].r = rson;if (lson != rson) {build_segm(x*2, lson, (lson + rson)/2);build_segm(x*2 + 1, (lson + rson)/2 + 1, rson);}
}
int query_segm(int x, int y) {seg[x].value--; //维护区间长度if (seg[x].l == seg[x].r) return seg[x].l;if (seg[2*x].value >= y) query_segm(2*x, y);else query_segm(2*x + 1, y - seg[2*x].value);
}
int main() {while (scanf("%d", &n) != EOF) {ar[1] = 0;for (int i = 2; i <= n; i++) scanf("%d", &ar[i]);build_segm(1, 1, n);for (int i = n; i >= 1; i--) {ans[i] = query_segm(1, ar[i] + 1);}for (int i = 1; i <= n; i++) {printf("%d\n", ans[i]);}}return 0;
}

转载于:https://www.cnblogs.com/cniwoq/p/6770752.html

POJ - 2182 Lost Cows【线段树】相关推荐

  1. POJ 3667 Hotel(线段树)

    POJ 3667 Hotel 题目链接 题意:有n个房间,如今有两个操作 1.找到连续长度a的空房间.入住,要尽量靠左边,假设有输出最左边的房间标号,假设没有输出0 2.清空[a, a + b - 1 ...

  2. POJ 2828 Buy Tickets 线段树

    题目: http://poj.org/problem?id=2828 很巧妙的题,逆序插入线段树,这样元素不用移动.用二叉排序树也能过. 1 #include <stdio.h> 2 #i ...

  3. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  4. poj/OpenJ_Bailian - 2528 离散化+线段树

    传送门:http://bailian.openjudge.cn/practice/2528?lang=en_US //http://poj.org/problem?id=2528 题意: 给你n长海报 ...

  5. poj 2777 Count Color(线段树区区+染色问题)

    题目链接:  poj 2777 Count Color 题目大意:  给出一块长度为n的板,区间范围[1,n],和m种染料 k次操作,C  a  b  c 把区间[a,b]涂为c色,P  a  b 查 ...

  6. POJ 2991 Crane(线段树+计算几何)

    POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...

  7. POJ 2828 Buy Tickets | 线段树的喵用

    题意: 给你n次插队操作,每次两个数,pos,w,意为在pos后插入一个权值为w的数; 最后输出1~n的权值 题解: 首先可以发现,最后一次插入的位置是准确的位置 所以这个就变成了若干个子问题, 所以 ...

  8. POJ Mayor's posters——线段树+离散化

    原文:http://blog.163.com/cuiqiongjie@126/blog/static/85642734201261151553308/ 大致题意: 有一面墙,被等分为1QW份,一份的宽 ...

  9. POJ 3368 Frequent values 线段树区间合并

    题意O(-1)不用解释.. 线段树结点维护三个信息:区间内相同的数出现最多的次数maxc.区间左边第一个数出现的次数lc.区间右边第一个数出现的次数rc. 分左区间右端点和右区间左端点相同于否的情况合 ...

最新文章

  1. c++ std::priority_queue优先队列
  2. tensorflow 无法执行sess =tf .session ()_深度学习|费解的tensorflow
  3. PPT模板中的”书签”
  4. JDK13的六大重要新特性
  5. OSPF第十章:OSPF 一
  6. 算法设计与分析——递归与分治——归并排序
  7. 物联网应用领域-物联网智能安全始于产品开发
  8. js中 var a= b || c;
  9. 测试面试题集-2.测试用例设计
  10. 2018-2019-2 20165303《网络对抗技术》Exp2 后门原理与实践
  11. numpy与matplotlib的学习报告
  12. 如何解决MFC读取文件在EditControl中显示是乱码的问题
  13. CMSSDK功能介绍和关联用户系统
  14. 2021年PMP考试模拟题9(含答案解析)
  15. Dev5.4.0由于与64位的版本不兼容的问题解决方案
  16. 转:SDHC卡驱动及初始化
  17. google工具栏新览
  18. 软件测试的原则和经验
  19. c语言加加运算符是什么意思,c语言*p++是什么意思?
  20. 大数据时代,企业如何做好数据防泄漏?

热门文章

  1. win10环境下VTK7.1的编译和Qt调用VTK的详细教程二(VS2013编译支持Qt的VTK库)
  2. Safari 时间格式转换 NAN 问题
  3. 7-133 谷歌的招聘 (20 分)
  4. 力扣232-用栈实现队列(C++,附思路)
  5. 汇编语言---乘法指令及符号扩展
  6. STM32 (零)--------STM32介绍
  7. js控制scss的变量_web前端:js如何操作sass里的变量及calc 使用sass变量
  8. android 获取动态时间间隔,android 获取时间间隔
  9. linux安装替换python3,linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
  10. php 获取语句,PHP获取当前服务器的基本语句