poj 2182 Lost Cows 解题报告
题意:每个奶牛都有一个编号,1- N 从第二个牛开始给出前面比她编号小的牛的个数,问你求牛的编号序列
解题思路:线段树+ 二分查找 (多个相同的数二分边界问题需要注意)
解题代码:
1 #include <stdlib.h> 2 #include <string.h> 3 #include <stdio.h> 4 #define MAXN 8005 5 struct node 6 { 7 int left , right,mid ; 8 int num; 9 }tree[MAXN*4]; 10 int L(int c) 11 { 12 return 2 * c; 13 } 14 int R(int c) 15 { 16 return 2 * c + 1; 17 } 18 void up(int c ) 19 { 20 tree[c].num = tree[L(c)].num + tree[R(c)].num; 21 } 22 void build(int c ,int p , int v) 23 { 24 tree[c].left = p ; 25 tree[c].right = v ; 26 tree[c].mid = (p+v)/2; 27 tree[c].num = 1; 28 if(p == v ) 29 { 30 return; 31 } 32 build(L(c),p,tree[c].mid); 33 build(R(c),tree[c].mid + 1, v ); 34 up(c); 35 } 36 void update(int c , int p) 37 { 38 if(tree[c].left == p && tree[c].right == p ) 39 { 40 tree[c].num = 0 ; 41 return ; 42 } 43 if(p <= tree[c].mid) update(L(c),p); 44 else update(R(c),p); 45 up(c); 46 } 47 int tsum = 0 ; 48 void getsum (int c, int p , int v ) 49 { 50 if(p <= tree[c].left && v >= tree[c].right) 51 { 52 tsum += tree[c].num; 53 return ; 54 } 55 if(v <= tree[c].mid) getsum (L(c),p,v); 56 else if(p > tree[c].mid) getsum(R(c),p, v); 57 else 58 { 59 getsum(L(c),p,tree[c].mid); 60 getsum(R(c),tree[c].mid + 1, v ); 61 } 62 } 63 int a[MAXN]; 64 int b[MAXN]; 65 int main() 66 { 67 int n ; 68 while(scanf("%d",&n) != EOF) 69 { 70 memset(a,0,sizeof(a)); 71 memset(b,0,sizeof(b)); 72 for(int i = 2; i <= n;i ++) 73 scanf("%d",&a[i]); 74 b[n] = a[n] + 1; 75 build(1,1,n+1); 76 update(1,b[n]); 77 for(int i = n- 1; i >=1 ;i --) 78 { 79 int low = 1 , high = n; 80 int ans ; 81 while(low <= high) 82 { 83 tsum = 0 ; 84 85 int mid = (low + high)/2; 86 getsum(1,1,mid); 87 if(tsum >= a[i]+1) 88 { 89 ans = mid ; 90 high = mid - 1; 91 } 92 else 93 low = mid +1; 94 } 95 // printf("%d\n",ans); 96 b[i] = ans ; 97 tsum = 0 ; 98 getsum(1,1,ans); 99 // printf("%d\n",tsum); 100 update(1,b[i]); 101 } 102 for(int i = 1;i <= n; i ++) 103 printf("%d\n",b[i]); 104 } 105 return 0 ; 106 }
View Code
转载于:https://www.cnblogs.com/zyue/p/3224570.html
poj 2182 Lost Cows 解题报告相关推荐
- POJ 2800 垂直直方图 解题报告
POJ 2800 垂直直方图 解题报告 编号:2800 考查点:简单计算题 思路: 用gets()读入4行数据,然后按字符统计,显示的时候有点小处理即可. 提交情况: 感觉POJ的测试数据有点骗人 ...
- Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
http://blog.csdn.net/geniusluzh/article/details/6619575 在说Tarjan算法解决桥和边双连通分量问题之前我们先来回顾一下Tarjan算法是如何求 ...
- POJ 1797 Heavy Transportation 解题报告
分类:图论,生成树,最短路,并查集 作者:ACShiryu 时间:2011-7-28 地址:ACShiryu's Blog Heavy Transportation Time Limit: 3000M ...
- POJ 2977 生理周期 解题报告
2977 : 生理周期 总时间限制: 1000ms 内存限制: 65536kB 描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高 ...
- POJ 1001 Exponentiation C++解题报告 JAVA解题报告
求高精度幂 Time Limit: 500MS Memory Limit: 10000K Total Submissions: 126980 Accepted: 30980 Descripti ...
- POJ 2182 Lost Cows [树状数组+二分]
Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacular di ...
- poj 1325 Machine Schedule 解题报告
题目链接:http://poj.org/problem?id=1325 题目意思:有 k 个作业,机器A有 n 个模式:0 ~ n-1,机器B 有 m 个模式:0~ m-1.每一个作业能运行在 A 的 ...
- 洛谷 P2862 [USACO06JAN]把牛Corral the Cows 解题报告
P2862 [USACO06JAN]把牛Corral the Cows 题目描述 Farmer John wishes to build a corral for his cows. Being fi ...
- Poj 1451 JAVA 个人解题报告
AC 时间 334ms,内存 3000k 题目大意: 模拟手机键盘的九宫格输入模式,每当输入单词,就会显示可能的单词, 根据每个单词的可能性. 这个可能性就是输入列表里跟随每个单词后面的那个正整数. ...
最新文章
- sync是同步还是非同步_MySQL半同步复制你可能没有注意的点
- 洛谷3317 SDOI2014重建(高斯消元+期望)
- matlab fspeical,matlab的special函数用法
- linux卸载mariadb数据库,CentOS yum 安装、卸载MariaDB数据库
- 生产Java应用程序中的十大异常类型-基于1B事件
- 关于MongoDB时区问题
- ORACLE分页查询SQL语法——高效的分页
- 如何实现一个简单的熔断以及Hystrix原理分析
- Android binder机制---概述
- c 语言病毒源码大全,易语言病毒源码大全
- VS 2017番茄插件安装破解教程:visual assist
- c语言实验步骤与过程,C语言实验报告《逻辑结构程序设计》
- 网约叫车出行小程序开发制作功能介绍
- 常用快捷键大全Win7快捷键
- 网易视频云:浅谈视频通信技术的发展
- C语言单目运算符和双目运算符、三目运算符
- 分享两个CAD模型网站
- linux内核态加速文件读取,学习在kernel态下使用NEON对算法进行加速的方法
- 骑缝章 Java_Java 在PDF中添加骑缝章示例解析
- 后台管理系统的逻辑实现
热门文章
- 【数据库的备份与还原】 .
- 本文将引导你使用XNA Game Studio Express一步一步地创建一个简单的游戏
- Tiray.SMSTiray.SMSTiray.SMSTiray.SMSTiray.SMSTiray.SMS
- Google-Guava-EventBus源码解读
- spring 之 property-placeholder 分析
- 关于大学生玩网络游戏的调查问卷
- 自定义 View 循环滚动刻度控件
- Redis发布与订阅——PUBLISH SUBSCRIBE
- openfire 的配置文件
- 案例精解企业级网络构建