链接:https://www.nowcoder.com/acm/contest/136/G
来源:牛客网
第一行有2个正整数m,k。
接下来m行,每行描述一种操作:add x,del x或query x。
对于每个query操作,输出一行,包含一个单词“Yes”或“No”,表示该人是否可以打开指纹锁。
法一: set集合的运用:重要---erqase 的使用
不知道问什么c++11超时,c++14就ok了。
#include <bits/stdc++.h> using namespace std; set <int> e; set <int>::iterator it,t; int n, k; int main () { scanf ("%d %d", &n,&k); char str[10]; int x; for (int i = 1; i <= n; i++) { scanf (" %s %d", str, &x); if (str[0] == ‘a‘) { it = e.lower_bound(x - k); if (it == e.end() || x + k < *it) e.insert(x); } else if (str[0] == ‘q‘) { it = e.lower_bound(x - k); if (it == e.end() || x + k < *it) puts("No"); else puts("Yes"); } else { it = e.lower_bound(x - k); t=it; while (it != e.end() && (*it <= x + k)) it++; e.erase(t,it); } } return 0; }
原文:https://www.cnblogs.com/xidian-mao/p/9504003.html