#include <set>
#include <cstdio>
#include <algorithm>
#include <vector>
const int inf=1e9;
using namespace std;
int abs(int a) {return a<0?-a:a;}
int n,m,minn=1e9,maxn,t[500010];
vector<int> a[500010];
multiset<int> b,bb;
int main()
{
scanf("%d%d",&n,&m);
bb.insert(inf); bb.insert(-inf);
for(int i=1,x;i<=n;i++)
{
scanf("%d",&x);
int xx=*bb.upper_bound(x),xxx=*--bb.upper_bound(x);
minn=min(minn,min(abs(xx-x),abs(xxx-x)));
a[i].push_back(x);
bb.insert(x);
if(i!=1) b.insert(abs(x-a[i-1].back())),t[abs(x-a[i-1].back())]=1;
}
for(int i=1,p,k;i<=m;i++)
{
char s[233];
scanf(" %s",s+1);
if(s[1]=='I')
{
scanf("%d%d",&p,&k);
int xx=*bb.upper_bound(k),xxx=*--bb.upper_bound(k);
minn=min(minn,min(abs(xx-k),abs(xxx-k)));
bb.insert(k);
//维护前驱后继最小值。
int x2=a[p].back();
if(p<n)
{
int c=abs(x2-a[p+1].front());
b.erase(b.find(c));
int x1=abs(k-a[p+1].front());
b.insert(x1);
t[x1]=1;
} //维护向后的差值
a[p].push_back(k);
x2=abs(x2-a[p].back());
b.insert(x2);//维护向前的差值
t[x2]=1;
}
if(s[5]=='G')
printf("%d\n",*b.begin());
if(s[5]=='S')
printf("%d\n",minn);
}
return 0;
}
没怎么用过STL,今天想找一道题练练手,结果一练就是一天,求大佬找找错误吧