可以发现合法的答案有两种可能:
1.询问的$x$即为最大值(或之一),那么只需要找到x前两个数并判断即可
2.询问的$x$不是最大值,那么就要保证另外两边之差小于$x$,维护后缀中$的前驱k-k的前驱$最小的数即可,可以使用线段树
然而这道题还有很多的细节:
1.这里的前驱可以与k相等(因为$x,k,k$($k>x$)也可以),因此在插入后从1变成2同样也要修改(同理删除2变成1)
2.但修改时找前驱需要找到第一个比他小的,然后它的后继同样也要修改
3.$x$的前两个数有三种可能:$x,x,x$、$x,x,y$、$x,y,z$,需要分类讨论(比如有1个x,那么就需要根据个数来查询)

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define oo 0x3f3f3f3f
5 #define mid (l+r>>1)
6 #define T r,1,1e9
7 int V,r,n,p,k,ls[N*30],rs[N*30],sum[N*30],f[N*30];
8 int add(int &k,int l,int r,int x,int y){
9 if (!k)k=++V;
10 sum[k]+=y;
11 if (l==r)return sum[k];
12 if (x<=mid)return add(ls[k],l,mid,x,y);
13 return add(rs[k],mid+1,r,x,y);
14 }
15 int find1(int k,int l,int r,int x){
16 if ((!x)||(!sum[k]))return -oo;
17 if (l==r)return l;
18 if (x<=mid)return find1(ls[k],l,mid,x);
19 int ans=find1(rs[k],mid+1,r,x);
20 if ((ans>0)||(!sum[ls[k]]))return ans;
21 return find1(ls[k],l,mid,x);
22 }
23 int find2(int k,int l,int r,int x){
24 if ((x>1e9)||(!sum[k]))return oo;
25 if (l==r)return l;
26 if (mid<x)return find2(rs[k],mid+1,r,x);
27 int ans=find2(ls[k],l,mid,x);
28 if ((ans!=oo)||(!sum[rs[k]]))return ans;
29 return find2(rs[k],mid+1,r,x);
30 }
31 void update(int k,int l,int r,int x,int y){
32 if (l==r){
33 f[k]=y;
34 return;
35 }
36 if (x<=mid)update(ls[k],l,mid,x,y);
37 else update(rs[k],mid+1,r,x,y);
38 f[k]=min(f[ls[k]],f[rs[k]]);
39 }
40 int query(int k,int l,int r,int x,int y){
41 if ((!k)||(l>y)||(x>r))return oo;
42 if ((x<=l)&&(r<=y))return f[k];
43 return min(query(ls[k],l,mid,x,y),query(rs[k],mid+1,r,x,y));
44 }
45 int main(){
46 scanf("%d",&n);
47 memset(f,oo,sizeof(f));
48 for(int i=1;i<=n;i++){
49 scanf("%d%d",&p,&k);
50 int x=find1(T,k-1),y=find2(T,k+1);
51 if (p<3){
52 int t=add(T,k,3-2*p);
53 if ((p==1)&&(t==2))update(T,k,0);
54 if ((p==2)&&(t==1))update(T,k,k-x);
55 if ((p==1)&&(t==1)){
56 update(T,k,k-x);
57 if ((y!=oo)&&(add(T,y,0)==1))update(T,y,y-k);
58 }
59 if ((p==2)&&(t==0)){
60 update(T,k,oo);
61 if ((y!=oo)&&(add(T,y,0)==1))update(T,y,y-x);
62 }
63 }
64 else{
65 int t=add(T,k,0);
66 if ((t>1)||((x>0)&&((t==1)||(2*x-query(T,x,x)>k)))){
67 printf("Yes\n");
68 continue;
69 }
70 if (query(T,y,1e9)<k)printf("Yes\n");
71 else printf("No\n");
72 }
73 }
74 }

[nowcoder5667H]Happy Triangle的更多相关文章

  1. [LeetCode] Triangle 三角形

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  2. [LeetCode] Pascal's Triangle II 杨辉三角之二

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  3. [LeetCode] Pascal's Triangle 杨辉三角

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...

  4. 【leetcode】Pascal's Triangle II

    题目简述: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Retur ...

  5. 【leetcode】Pascal's Triangle

    题目简述: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5 ...

  6. POJ 1163 The Triangle(简单动态规划)

    http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  7. Triangle - Delaunay Triangulator

    Triangle - Delaunay Triangulator  eryar@163.com Abstract. Triangle is a 2D quality mesh generator an ...

  8. LeetCode 118 Pascal's Triangle

    Problem: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows  ...

  9. LeetCode 119 Pascal's Triangle II

    Problem: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Ret ...

随机推荐

  1. sarama的消费者组分析、使用

    以前老的sarama版本不支持消费者组的消费方式,所以大多数人都用sarama-cluster. 后来sarama支持了消费者组的消费方式,sarama-cluster也停止维护了,但网上关于sara ...

  2. jmeter基础功能及认识

    1.基础知识: JMeter是免费开源的,纯java开发的性能测试工具,可以测试静态和动态的资源,例如:静态文件.java服务小程序.CGI脚本.java对象.数据库.FTP服务器.邮件服务器和Per ...

  3. Jupyter Notebook配置多个kernel

    Jupyter Notebook配置多个kernel 前言: 在anaconda下配置了多个环境,而Jupiter Notebook只是安装在base环境下,为了能在Jupiter Notebook中 ...

  4. [no_code]OCR表格处理——技术规格说明书

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 技术规格说明书 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作业在哪个具体方面 ...

  5. 表单编辑时el-form的validate方法执行无效,阻塞代码运行 - Element UI踩坑记录

    今天在用element-ui写管理后台需求时,遇到一个奇怪的问题 一个正常带校验的表单,在新增列表数据时表单校验功能正常: 但是在新增之后再去编辑数据时,表单校验却失效了,甚至阻塞了后续的代码执行,控 ...

  6. 零基础入门C/C++实现你的浪漫表白:浪漫流星雨表白程序

    想要讨女朋友欢心也巩固自己所学的知识,各位小伙伴有自己的想法了吗?准备好想要怎样实施了吗?有什么美好的计划了吗?如果没有的话那么别慌,我知道,在座的各位肯定都是有自己的心仪的姑娘,那么今天就教大家一招 ...

  7. linux hostid与lmhostid

    https://wangchujiang.com/linux-command/c/hostid.html hostid(host identifier) 显示当前主机的十六进制数字标识. 概要 hos ...

  8. minimum-depth-of-binary-tree leetcode C++

    Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the short ...

  9. P2598 [ZJOI2009]狼和羊的故事(最小割)

    P2598 [ZJOI2009]狼和羊的故事 说真的,要多练练网络流的题了,这么简单的网络流就看不出来... 题目要求我们要求将狼和羊分开,也就是最小割,(等等什么逻辑...头大....) 我们这样想 ...

  10. Nginx多种安装方式

    不指定参数配置的Nginx编译安装 ./configuremake make install wget下载或浏览器下载上传.解压进入目录[root@mcw1 nginx-1.10.2]# ls #查看 ...