可以发现合法的答案有两种可能:
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. 关于VS中的无法解析的外部符号问题

    利用caffe的源码编译出的caffe.lib静态链接库里面就包含了源码里面的那些函数的接口i,所以如果在程序中使用的是源码的话,就不需要在链接器里面再添加此静态链接库了 对于无法解析的外部符号,首先 ...

  2. Apache ShardingSphere 在京东白条场景的落地之旅

    京东白条使用 Apache ShardingSphere 解决了千亿数据存储和扩容的问题,为大促活动奠定了基础. 2014 年初,"京东白条"作为业内互联网信用支付产品,数据量爆发 ...

  3. Analysis Tools(分析工具)

    分析工具 1.叠加分析 # Process: 交集取反 arcpy.SymDiff_analysis("", "", 输出要素类, "ALL" ...

  4. 定制input元素

    定制input元素 input元素可以用来生成一个供用户输入数据的简单文本框.其缺点在于用户在其中输入什么值都可以.有时这还不错,但是有时设计者可能希望让用户输入特定类型的数据.在后一种情况下,可以对 ...

  5. 初识Linux shell

    目录 初识Linux shell Linux 深入探究Linux内核 系统内存管理 交换空间 页面 换出 软件程序管理 Linux中的进程 Linux系统的运行级 硬件设备管理 插入设备驱动代码的方法 ...

  6. bash反弹shell

    part1:不求甚解的本地复现 攻击端Debian 10.x:  192.168.208.134 受害端Ubuntu : 192.168.208.135 攻击端打开(监听)某端口:  键入命令:[nc ...

  7. Java正则中"\\\\"表示普通反斜杠

    Java中"\"用于转义字符,"\\"表示普通无转义功能的反斜杠. 如果将字符串当做正则表达式来解析,那么"\\"也有了特殊意义,它与其后的 ...

  8. airtest常用指令

    airtest 操作adb命令   常用adb 1)对特定设备执行adb指令 dev = connect_device("Android:///device1") dev.shel ...

  9. [no code][scrum meeting] Beta 4

    例会时间:5月16日11:30,主持者:伦泽标 下次例会时间:5月18日11:30,主持者:叶开辉 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 完成整体框架设计与登录逻辑 与后端对接 ...

  10. 洛谷 P4867 Gty的二逼妹子序列

    链接: P4867 题意: 给出长度为 \(n(1\leq n\leq 10^5)\) 的序列 \(s\),保证\(1\leq s_i\leq n\).有 \(m(1\leq m\leq 10^6)\ ...