[BZOJ5139][Usaco2017 Dec]Greedy Gift Takers 权值线段树
Description
Input
Output
Sample Input
1 2 0
Sample Output
HINT
Source
Solution
做法:权值线段树
后面的牛不会领到礼物当且仅当前面形成了循环节
所以找出最小的循环节就是答案了
设$a_i = n - c_i $,$x=max(b_i)$($b_i$在循环节中),形成循环节的条件就是牛的数量大于等于$x$(这个在纸上画画图就出来了)
枚举这个$x$,然后在$b_i<=x$的$b_i$中找第$x$小的,这个操作可以用权值线段树维护
#include <bits/stdc++.h> using namespace std ; #define lc ( rt << 1 | 1 )
#define rc ( rt << 1 )
const int N = 1e5 + ; int n ;
int c[ N ] , t[ N << ] ;
int ans ;
vector < int > vt[ N ] ; void add( int l , int r , int rt , int x ) {
t[ rt ] ++ ;
int mid = ( l + r ) >> ;
if( l == r ) return ;
if( x <= mid ) add( l , mid , lc , x ) ;
else add( mid + , r , rc , x ) ;
} int query( int l , int r , int rt , int x ) {
if( l == r ) return l ;
int mid = ( l + r ) >> ;
if( t[ lc ] >= x ) return query( l , mid , lc , x ) ;
else return query( mid + , r , rc , x - t[ lc ] ) ;
} int main() {
scanf( "%d" , &n ) ;
for( int i = ; i <= n ; i ++ ) scanf( "%d" , &c[ i ] ) , vt[ n - c[ i ] ].push_back( i ) ;
ans = n ;
for( int i = ; i <= n ; i ++ ) {
for( int j = , len = vt[ i ].size() ; j < len ; j ++ ) add( , n , , vt[ i ][ j ] ) ;
if( t[ ] >= i ) ans = min( ans , query( , n , , i ) ) ;
}
printf( "%d\n" , n - ans ) ;
return ;
}
[BZOJ5139][Usaco2017 Dec]Greedy Gift Takers 权值线段树的更多相关文章
- BZOJ4777 [Usaco2017 Open]Switch Grass[最小生成树+权值线段树套平衡树]
标题解法是吓人的. 图上修改询问,不好用数据结构操作.尝试转化为树来维护.发现(不要问怎么发现的)最小生成树在这里比较行得通,因为最近异色点对一定是相邻的(很好想),所以只要看最短的一条两端连着异色点 ...
- BZOJ 4777 Usaco2017 Open Switch Grass Kruskal+替罪羊树+权值线段树
这道题首先可以看出答案一定是一条边,而且答案一定在最小生成树上,那么我们就可以在这个最小生成树上维护他与异色儿子的边最小值,所以我们就可以已通过Kruskal和一棵平衡树来解决,时间复杂度是O(n*l ...
- 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)
传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...
- Codeforces 558E A Simple Task(权值线段树)
题目链接 A Simple Task 题意 给出一个小写字母序列和若干操作.每个操作为对给定区间进行升序排序或降序排序. 考虑权值线段树. 建立26棵权值线段树.每次操作的时候先把26棵线段树上的 ...
- HDU 6464 /// 权值线段树
题目大意: 共Q次操作 操作有两种 操作一 在序列尾部加入f[i]个s[i] 操作二 查询序列第f[i]小到第s[i]小之间的总和 离线操作 把序列内的值离散化 然后利用离散化后的值 在线段树上对应权 ...
- 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
- 【BZOJ-2892&1171】强袭作战&大sz的游戏 权值线段树+单调队列+标记永久化+DP
2892: 强袭作战 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 45 Solved: 30[Submit][Status][Discuss] D ...
- BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)
题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...
- 动态求区间K大值(权值线段树)
我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...
随机推荐
- eclipse 64和32位切换
JAVA_HOME配置的是JAVA_HOME=D:\Java\32\jdk1.6.0_13
- 访问GitLab的PostgreSQL数据库-(3)
1.登陆gitlab的安装服务查看配置文件 cat /var/opt/gitlab/gitlab-rails/etc/database.yml production: adapter: postgre ...
- 苹果copy等其他的英文改成中文
程序plist有个参数localization native development region改成china
- 解决 libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el6.x86_64案例
在mysql主从同步时经常会用到Xtra, XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说优势较大好处 ...
- Ubuntu 下Apache安装和配置
在Ubuntu上安装Apache,有两种方式:1 使用开发包的打包服务,例如使用apt-get命令:2 从源码构建Apache.本文章将详细描述这两种不同的安装方式. 方法一:使用开发包的打包服务—— ...
- CMSPRESS-PHP无限级分类2
原文章地址:http://www.thinkphp.cn/code/170.html 超级无限分类 使用简单 效率极高 核心代码10行不到 另外 求这个分类的不足,和更高效简单的无限分类方法 ^_^ ...
- PAT 1027 Colors in Mars[简单][注意]
1027 Colors in Mars (20)(20 分) People in Mars represent the colors in their computers in a similar w ...
- myeclipse自带的数据库查看文件
jdbc:mysql://localhost:3306/videocms?useUnicode=true&characterEncoding=utf8
- windows上备份mysql数据库
方案一:采用mysql自带的工具mysqldump. 脚本文件backup.bat如下: set "YMD=%date:~,4%%date:~5,2%%date:~8,2%"cd ...
- 【Redis学习之一】Redis
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 一.Redis入门介绍 数据存储的发展:文件存储--> ...