【BZOJ4099】Trapped in the Haybales Gold STL
【BZOJ4099】Trapped in the Haybales Gold
Description
Input
Output
Sample Input
8 1
1 4
8 8
7 15
4 20
Sample Output
题解:这种思路题果然难搞,无奈上官网看的题解。
如果我们将干草堆按坐标排序,对于某段区间[i,j],加入Bessie能突破[i+1,j-1]内的所有干草,但是就是突破不了[i,j],那就说明[i,j]里面一定没有比i,j更大的干草堆
因此,我们将干草堆按大小从大到小排序,一个一个加到坐标轴上,每加入一个干草堆,就找到它的前驱和后继,并分别判断这两段区间能否突破,如果不能,将区间标记一下就好了(我比较懒用的差分数组来打标记)
前驱后继可以用set来维护,但注意查询到前驱后继时我们还需要知道前驱后继的干草堆大小,这个记录一下排在第i位(按坐标排序)的干草堆编号就行了
#include <cstdio>
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
const int maxn=100010;
int h[maxn],x[maxn],rx[maxn],rh[maxn];
bool cmp1(int a,int b)
{
return x[a]<x[b];
}
bool cmp2(int a,int b)
{
return h[a]>h[b];
}
int s[maxn],sum;
int n,ref[maxn],ans;
set <int> ms;
int main()
{
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++) scanf("%d%d",&h[i],&x[i]),rx[i]=rh[i]=i;
//rx,rh存储的其实是编号,我们是在将编号排序
sort(rx+1,rx+n+1,cmp1);
for(i=1;i<=n;i++)
{
ref[i]=x[rx[i]];
x[rx[i]]=i;
}
sort(rh+1,rh+n+1,cmp2);
set<int>::iterator it;
for(i=1;i<=n;i++)
{
it=ms.lower_bound(x[rh[i]]);
if(it!=ms.begin()&&!ms.empty())
{
it--;
j=rx[*it];
if(ref[x[rh[i]]]-ref[x[j]]<=min(h[rh[i]],h[j]))
{
s[x[j]]++;
s[x[rh[i]]]--;
}
}
it=ms.upper_bound(x[rh[i]]);
if(it!=ms.end())
{
j=rx[*it];
if(ref[x[j]]-ref[x[rh[i]]]<=min(h[rh[i]],h[j]))
{
s[x[rh[i]]]++;
s[x[j]]--;
}
}
ms.insert(x[rh[i]]);
}
for(i=1;i<=n;i++)
{
ans+=(sum>0)*(ref[i]-ref[i-1]);
sum+=s[i];
}
printf("%d",ans);
return 0;
}
【BZOJ4099】Trapped in the Haybales Gold STL的更多相关文章
- 【leetcode】1219. Path with Maximum Gold
题目如下: In a gold mine grid of size m * n, each cell in this mine has an integer representing the amou ...
- 【Codeforces752D】Santa Claus and a Palindrome [STL]
Santa Claus and a Palindrome Time Limit: 20 Sec Memory Limit: 512 MB Description 有k个串,串长都是n,每个串有一个a ...
- 【UVA】12504 Updating a Dictionary(STL)
题目 题目 分析 第一次用stringstream,真TMD的好用 代码 #include <bits/stdc++.h> using namespace std; int ...
- 【pat】C++之刷题常用STL容器整理
1.vector 动态数组,方便的动态扩容,方便的变量初始化(int类型默认初始化为0,bool默认初始化为false),可以用来实现邻接表(结点数太多的图). 头文件 #include<vec ...
- P1450 包裹快递 RP+14【二分】
[题目链接]:https://vijos.org/p/category/%E5%85%B6%E4%BB%96,%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE 描述 一个快递公 ...
- 【BZOJ4101】[Usaco2015 Open]Trapped in the Haybales Silver 二分
[BZOJ4101][Usaco2015 Open]Trapped in the Haybales (Silver) Description Farmer John has received a sh ...
- 【BZOJ】1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列
[题意]给定n头牛,k个特色,给出每头牛拥有哪些特色的二进制对应数字,[i,j]平衡当且仅当第i~j头牛的所有特色数量都相等,求最长区间长度. [算法]平衡树+数学转化 [题解]统计前缀和sum[i] ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【POJ3169 】Layout (认真的做差分约束)
Layout Description Like everyone else, cows like to stand close to their friends when queuing for ...
随机推荐
- 可变长度子网掩码(VLSM)在子网划分中的应用
在学习可变长度子网掩码时,必须先熟练掌握二进制与十进制的转化.计算机中数据的单位(字节.位)等知识. 一.什么是可变长度子网掩码? 要理解可变长度子网掩码,先要理解子网掩码:要理解子网掩码,先要理解I ...
- Redis未授权访问漏洞
一.漏洞描述和危害 Redis因配置不当可以未授权访问,被攻击者恶意利用.攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据. 攻击者可通过EVAL ...
- r指定位置插入一列
y<-1:4 data1 <-data.frame(x1=c(1,3,5,7), x2=c(2,4,6,8),x3=c(11,12,13,14),x4=c(15,16,17,18)) da ...
- am335x 10.1"电容touch 不能识别
/**************************************************************** * am335x 10.1"电容touch 不能识别 * ...
- imx6 电容屏参数更改
imx6使用电容屏时需要获取对应的usb的event.其中用到了shell的一些命令.分析如下. # inputCheckLine=`cat /proc/bus/input/devices | gre ...
- C++ Primer学习笔记(一)
始终对C++念念不忘,看过 一个32岁入门的70后程序员给我的启示 之后,心情激荡,更是一发不可收拾. 认真地说,我不是一个执着的人,见异思迁,好读书而不求甚解,兼之情绪化(~~ 某些方面),于是怒 ...
- php -- 读取文本文件内容
php读取文件内容的三种方法: //**************第一种读取方式***************************** 代码如下: header("content- ...
- Java设计模式(三) Visitor(訪问者)模式及多分派场景应用
基本概念 Visitor 封装一些作用于数据结构中的各元素的操作,不同的操作能够借助新的visitor实现.减少了操作间的耦合性 訪问者能够将数据结构和对数据的操作解耦,使得添加对数据结构的操作不须要 ...
- 对phpexcel的若干补充
导出excel属性设置 //Include class require_once('Classes/PHPExcel.php'); require_once('Classes/PHPExcel/Wri ...
- c++ list set 方法集合
1. set的基本操作: begin() 返回指向第一个元素的迭代器 clear() 清除所有元素 count() 返回某个值元素的个数 empty() 如果集合为空,返回true end() 返回指 ...