题意:
一条长为n的绳子, 每一个整数位置都有一个标点
可以进行以下两种操作
1: 在标点x处剪断这条绳子
2: 输出在标点x处的绳子长度
题解:
首先要得到一段绳子的长度, 最先想到的是末端标点-起点标点
按照这个思路来想, 那么存入每个被剪断的标点都可以作为一段绳子的两个端点, 得到端点即得到长度
那么需要实现这个思路可以用set来做, 在set中存入端点, 进行2操作的时候使用库函数二分搜索即可
void solve()
{
cin>>n>>m;
set<int>s;
s.insert(0);
s.insert(n);
while(m--)
{
int x,y;
cin>>x>>y;
if(x==1) s.insert(y);
else
{
auto l=s.lower_bound(y);
//此处为指针坐标 查找的其实是第一个大于等于标点y的端点
//即r端点, 转化为l端点需要左移一位
auto r=l;
l--;//指针左移一位
cout<<*r-*l<<endl;
}
}
return;
}