这题感觉很蠢啊。
就把每个点按顺序排序,然后队列搞一下。
#include#include #include #include #include #include using namespace std;struct node{ int pos,c;}q[1100000];int len;bool cmp(node n1,node n2){ if(n1.pos 1) { v[q[head].c]--; head++; } ans=q[tail].pos-q[head].pos; //yu for(tail=tail+1;tail<=n;tail++) { v[q[tail].c]++; while(v[q[head].c]>1) { v[q[head].c]--; head++; } ans=min(q[tail].pos-q[head].pos,ans); } printf("%d\n",ans); return 0;}