hiho 1572 - set.upper_bound,排序树
小Hi家的阳台上摆着一排N个空花盆,编号1~N。从第一天开始,小Hi每天会选择其中一个还空着花盆,栽种一株月季花,直到N个花盆都栽种满月季。
我们知道小Hi每天选择的花盆的编号依次是A1, A2, ... AN。随着花盆中被栽种上月季,连续的空花盆数量越来越少。
现在小Ho想知道,第一次出现恰好K个连续空花盆(恰好是指这K个空花盆两边相邻的位置都不是空花盆)是第几天?
假设N=7,K=2,小Hi第1天~第7天选择的花盆编号依次是:4、2、7、5、1、3、6。
1234567
OOOOOOO 第0天,一段7个连续空花盆
OOOXOOO 第1天,一段3个连续空花盆,和另一段3连续个空花盆
OXOXOOO 第2天,1个、1个和3个连续空花盆
OXOXOOX 第3天,第一次出现2个连续空花盆
....
输入
第一行包含两个整数,N和K。
第二行包含N个两两不同的整数,A1, A2, ... AN。
对于30%的数据, 1 <= K < N <= 1000
对于100%的数据,1 <= K < N <= 100000, 1 <= Ai <= N
输出
输出第一次出现恰好连续K个空花盆是第几天。如果自始至终没出现输出-1
--------------------------------------------------------------------------------------------------------------------------
维护一个有序列表,每insert一个数则找到比它稍大和稍小的数,查看这两个区间长度是否满足条件。
我写了个二叉排序树超时了。。
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #define MAX(a,b) ((a)>=(b)?(a):(b))
#define MIN(a,b) ((a)<=(b)?(a):(b))
#define OO 0x0fffffff
using namespace std;
typedef long long LL; struct Node{
int data;
Node *left,*right,*father;
Node(){left=right=father=NULL;}
Node(int data,Node* father):data(data),father(father){
left=right=NULL;
}
Node* insert(int newd,int& bigger,int& smaller){
if(newd<data){
bigger = data;
if(left==NULL) return (left = new Node(newd,this));
else return left->insert(newd,bigger,smaller);
}
else{
smaller = data;
if(right==NULL) return right = new Node(newd,this);
else return right->insert(newd,bigger,smaller);
}
}
}; int main(){
int bigger,smaller;
int N,K,data; cin>>N>>K; K++;
Node* root = new Node(0,NULL);
root->insert(N+1,bigger,smaller); int ans = -2;
bool finded = false;
for(int i=0;i<N;i++){
scanf("%d",&data);
if(finded) continue; Node* p = root->insert(data,bigger,smaller);
//int bigger = p->findBigger();
//int smaller = p->findSmaller();
if(bigger-data==K||data-smaller==K){
ans = i; finded = true;
}
}
printf("%d\n",ans+1);
return 0;
}
看了别人代码才知道有upper_bound这个东西,直接调用就行了。。。
ac的代码
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #define MAX(a,b) ((a)>=(b)?(a):(b))
#define MIN(a,b) ((a)<=(b)?(a):(b))
#define OO 0x0fffffff
using namespace std;
typedef long long LL; set<int> sets; int main(){
int N,K,data; cin>>N>>K; K++;
sets.insert(); sets.insert(N+); int ans = -;
bool finded = false;
for(int i=;i<N;i++){
scanf("%d",&data);
if(finded) continue;
auto iter = sets.upper_bound(data);
int bigger = (*iter);
int smaller = *(--iter);
if(bigger-data==K||data-smaller==K){
finded = true, ans = i;
}
sets.insert(data);
}
printf("%d\n",ans+);
return ;
}
hiho 1572 - set.upper_bound,排序树的更多相关文章
- sqlalchemy tree 树形分类 无限极分类的管理。预排序树,左右值树。sqlalchemy-mptt
简介: 无限极分类是一种比较常见的数据格式,生成组织结构,生成商品分类信息,权限管理当中的细节权限设置,都离不开无限极分类的管理. 常见的有链表式,即有一个Pid指向上级的ID,以此来设置结构.写的时 ...
- hiho一下21周 线段树的区间修改 离散化
离散化 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~ 这天小Hi和小Ho ...
- HDU Always Cook Mushroom (极角排序+树状数组)
Problem Description Matt has a company, Always Cook Mushroom (ACM), which produces high-quality mush ...
- hiho一下20周 线段树的区间修改
线段树的区间修改 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 对于小Ho表现出的对线段树的理解,小Hi表示挺满意的,但是满意就够了么?于是小Hi将问题改了改,又出给了 ...
- 【九度OJ】题目1201-二叉排序树
题目 建树过程是递归,"递归的思路不是很复杂",经过题目1078的训练,直接开始编码.提交及修改的过程告诉自己,这是一个错觉,对递归的理解还应该再进一步. 自己的实现 #inclu ...
- 树·二叉查找树ADT(二叉搜索树/排序树)
1.定义 对于每个节点X,它的左子树中所有的项的值小于X的值,右子树所有项的值大于X的值. 如图:任意一个节点,都满足定义,其左子树的所有值小于它,右子树的所有值大于它. 2.平均深度 在大O模型中, ...
- 自平衡二叉(查找树/搜索树/排序树) binary search tree
在计算机科学中,AVL树是最先发明的自平衡二叉查找树.AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An alg ...
- 一步一步写数据结构(BST-二叉排序树)
二叉排序树的重要性不用多说,下面用c++实现二叉排序树的建立,插入,查找,修改,和删除.难点在于删除,其他几个相对比较简单. 以下是代码: #include<iostream> using ...
- hiho一下 第二周 trie树
Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路 ...
随机推荐
- js前台编码,asp.net后台解码 防止前台传值到后台为乱码
js编码: encodeURI() 后台解码:HttpUtility.UrlDecode()
- GreenDao 3.X之基本使用
在GreenDao 3.X之注解已经了解到GreenDao 3.0的改动及注解.对于数据库的操作,无异于增删改查等四个操作.下面我们将了解GreenDao 3.X如何使用? AbstractDao 所 ...
- Oracle安装后命令行中运行sqlplus / as sysdba出现错误ora-01031:insufficient privileges
Win10安装Oracle后命令行中运行sqlplus as sysdba出现错误ora-01031insufficient privileges的解决方法 情景描述 错误样例 错误分析 解决方法 情 ...
- ZBrush中如何反选遮罩
通过对ZBrush的学习,我们知道了如何手动创建遮罩,手动创建遮罩相对来说是最简单有效的方法,在某些特定的使用场合会起到事半功倍的效果.创建遮罩我们可以结合Ctrl键在物体保持编辑的状态下来执行,您可 ...
- ZBrush中平滑笔刷介绍
平滑笔刷在ZBrush®中的使用颇多,它可以在ZBrush®模型的多层细分下工作,并且能够控制对模型的平滑效果,而且还能将模型的细节完整保留.默认情况下,按住Shift键就会切换到平滑笔刷,根据调整不 ...
- day09-3 数据类型总结,深浅拷贝
目录 数据类型总结,深浅拷贝 存一个值还是多个值 有序 or 无序 可变 or 不可变 浅拷贝和深拷贝的区别(只针对可变类型) 1.拷贝: 3.深拷贝 总结: 数据类型总结,深浅拷贝 存一个值还是多个 ...
- Java之秒杀活动解决方案
0 引言 本文主要描述,服务端做相关秒杀活动的时候,对应的解决方案,即高并发下的数据安全. 1 优化方案 1.1 乐观锁思路 Redis中的watch,请求时,通过Redis查询当前抢购数据,如果当前 ...
- WoSign全球可信网站安全认证签章安装指南
您购买了WoSign SSL证书后,将免费获得一个能直观地显示贵网站的认证信息的可信网站安全认证标识,能大大增强用户的在线信任,促成更多在线交易.所以,建议您在安装成功SSL证书后马上在网站的首页和其 ...
- sklearn学习8-----GridSearchCV(自动调参)
一.GridSearchCV介绍: 自动调参,适合小数据集.相当于写一堆循环,自己设定参数列表,一个一个试,找到最合适的参数.数据量大可以使用快速调优的方法-----坐标下降[贪心,拿当前对模型影响最 ...
- git--客户端管理工具初步使用
说点废话哈 小白一枚, 今年3月份进入自己的第一家公司, 开始成为前端中的一份子,好在公司里有位和我一同进来的一位老哥带着我,从老哥身上学到的知识不多,(因为和老哥只相处工作了三个月,因为家里的事情, ...