【POJ2182】Lost Cows

题面

vjudge

题解

从后往前做

每扫到一个点\(i\)以及比前面小的有\(a[i]\)个数

就是查询当前的第\(a[i]+1\)小

然后查询完将这个数删掉

两个操作可以用平衡树实现

但是我比较懒用了\(01trie\)

据说暴力也可以过

代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <algorithm>
  7. using namespace std;
  8. inline int gi() {
  9. register int data = 0, w = 1;
  10. register char ch = 0;
  11. while (ch != '-' && (ch > '9' || ch < '0')) ch = getchar();
  12. if (ch == '-') w = -1 , ch = getchar();
  13. while (ch >= '0' && ch <= '9') data = data * 10 + (ch ^ 48), ch = getchar();
  14. return w * data;
  15. }
  16. const int MAX_N = 80005;
  17. struct Trie { int ch[2], size; } t[MAX_N * 18]; int tot;
  18. void insert(int v) {
  19. int o = 1; t[o].size++;
  20. for (int i = 17; i >= 0; i--) {
  21. int c = v >> i & 1;
  22. if (!t[o].ch[c]) t[o].ch[c] = ++tot;
  23. t[o = t[o].ch[c]].size++;
  24. }
  25. }
  26. void erase(int v) {
  27. int o = 1; t[o].size--;
  28. for (int i = 17; i >= 0; i--) {
  29. int c = v >> i & 1;
  30. t[o = t[o].ch[c]].size--;
  31. }
  32. }
  33. int Kth(int k) {
  34. int o = 1, res = 0;
  35. for (int i = 17; i >= 0; i--) {
  36. int sz = t[t[o].ch[0]].size;
  37. if (k <= sz) o = t[o].ch[0];
  38. else k -= sz, res |= 1 << i, o = t[o].ch[1];
  39. }
  40. return res;
  41. }
  42. int N, a[MAX_N], ans[MAX_N];
  43. int main () {
  44. N = gi(); for (int i = 1; i < N; i++) a[i + 1] = gi(); ++tot;
  45. for (int i = 1; i <= N; i++) insert(i);
  46. for (int i = N; i >= 1; i--) {
  47. ans[i] = Kth(a[i] + 1);
  48. erase(ans[i]);
  49. }
  50. for (int i = 1; i <= N; i++) printf("%d\n", ans[i]);
  51. return 0;
  52. }

【POJ2182】Lost Cows的更多相关文章

  1. 【POJ2182】Lost Cows 树状数组+二分

    题中给出了第 i 头牛前面有多少比它矮,如果正着分析比较难找到规律.因此,采用倒着分析的方法(最后一头牛的rank可以直接得出),对于第 i 头牛来说,它的rank值为没有被占用的rank集合中的第A ...

  2. 【POJ3621】Sightseeing Cows 分数规划

    [POJ3621]Sightseeing Cows 题意:在给定的一个图上寻找一个环路,使得总欢乐值(经过的点权值之和)/ 总时间(经过的边权值之和)最大. 题解:显然是分数规划,二分答案ans,将每 ...

  3. 【2186】Popular Cows(强连通分支及其缩点)

    id=2186">[2186]Popular Cows(强联通分支及其缩点) Popular Cows Time Limit: 2000MS   Memory Limit: 65536 ...

  4. 【POJ3621】Sightseeing Cows

    Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8331   Accepted: 2791 ...

  5. 【USACO】Milking Cows

    Three farmers rise at 5 am each morning and head for the barn to milk three cows. The first farmer b ...

  6. 【poj2182】【poj2828】树状数组/线段树经典模型:逆序查找-空位插入法

    poj2182题意:有一个1~n的排列,现在给定每个人前面有多少个人的编号比他大,求这个排列是什么.n<=8000 poj2182题解: 逆序做,可以确定二分最后一个是什么,然后删除这个数.树状 ...

  7. 【图论】Popular Cows

    [POJ2186]Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34752   Accepted: ...

  8. 【USACO】Strolling Cows

    Strolling Cows 给定有 \(n\) 个点 \(n\) 条边的有向图,每个点的出度都为 \(1\),求图中的最大环. 显然入度为 \(0\) 的点不可能为最大环上的点,所以考虑删点. 然后 ...

  9. 【poj2186】 Popular Cows

    http://poj.org/problem?id=2186 (题目链接) 题意 给出一个n个点m条边的有向图,求其中没有出度强连通分量所包含的点有几个 Solution 其实这道题的题解已经在“题意 ...

随机推荐

  1. 转 C++11 并发指南std::condition_variable详解

    之前看过,但是一直没有怎么用就忘了,转一篇别人的文字记录下来 本文将介绍 C++11 标准中 <condition_variable> 头文件里面的类和相关函数. <conditio ...

  2. C# Windows服务的安装和卸载批处理

    @ECHO "请按任意键开始安装后台服务. . ."@ECHO "清理原有服务项. . ."%SystemRoot%\Microsoft.NET\Framewo ...

  3. springmvc小结(下)

    1.@ModelAttribute 1.给共享的数据设置model数据设置,贴在形参上,也可以贴在方法上,设置一个model的key值 2.当controller方法返回一个对象的时候,,缺省值会把当 ...

  4. Kettle api 二次开发之 日志的保存

    使用kettle做数据抽取的时候可以使用图形化的工具配置日志保存参数,选择数据库连接,输入日志表名称, 点击sql 执行对应的sql创建日志表即可. 点击保存之后,日志配置会保存在trans或者job ...

  5. Many-to-many relationships in EF Core 2.0 – Part 1: The basics

    转载这个系列的文章,主要是因为EF Core 2.0在映射数据库的多对多关系时,并不像老的EntityFramework那样有原生的方法进行支持,希望微软在以后EF Core的版本中加入原生支持多对多 ...

  6. stylus(css预编译器)

    推荐去张鑫旭大神这里详细了解:http://www.zhangxinxu.com/jq/stylus/ 安装 npm install -g stylus 自动编译 $ stylus -w demo.s ...

  7. 来看看Uber的司机支持服务签到及预约系统的架构设计思路

    Uber的Greenlight Hubs(GLH)在全球拥有超过700个分支机构,为合作车主提供从账户和支付到车辆检查和车主注册等各方面的人工支持.为了给合作车主创造更好的体验并提高客户满意度,Ube ...

  8. Oracle树形结构数据-相关知识总结

    Oracle树形结构数据--基本知识 1.数据组成 2.基本查询 2.1.查询某节点及该节点下的所有子孙节点 SELECT   *      FROM QIANCODE.TREE_TABLE_BASI ...

  9. 增加oracle表空间

    查找用户对应的表空间 1.查询表空间物理文件路径select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_ ...

  10. 《Linux 学习》01---redis安装, 并使用Redis Desktop Manager 连接

    一.环境简介: linux 系统:centos 7.X 二.安装大纲: 1.下载安装包 2.安装 3.统一管理redis 配置文件 4.编辑redis配置文件,设置常用的功能 5.(1)命令启动,连接 ...