您的位置:首页 > 其它

CSU月赛1974

2017-07-30 20:51 417 查看
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cstdlib>
#include<set>
#define maxl 100010
#define eps 1e-6

using namespace std;

int n;
set <double> s;
set <double> :: iterator it,r;

void mainwork()
{
int d;
double x,y;
for(int i=1;i<=n;i++)
{
scanf("%d%lf%lf",&d,&x,&y);
if(d==1)
s.insert(x);
if(d==0)
{
if(s.empty())
printf("No\n");
else
{
it=s.end();--it;
if(*s.begin()<=x && *(it)>=x)
printf("Yes\n");
else
printf("No\n");
}
}
if(d==-1)
{
s.erase(x);
/*if(s.empty())
continue;
if(s.size()==1)
{
it=s.begin();
if((*it)>x-eps && (*it)<x+eps);
s.erase(it);
}
else
{
it=s.lower_bound(x);
r=s.upper_bound(x);
if(r==s.end())
--r;
if(it!=s.begin())
it--;
for(;it!=r;it++)
if((*it)>x-eps && (*it)<x+eps);
s.erase(it);
}*/
}
}
}

int main()
{
while(~scanf("%d",&n))
{
s.clear();
mainwork();
}
return 0;
}

题目本身简单,然而,我们要知道一些问题。
小数输入用lf   ,小数输出用f

set是按顺序排的。set.end()是末尾的后面一个it=set.end(),   it- -;

set中不进行运算,是可以存double  x,之后直接erase(x)的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: