很可能的错误原因:它要能回到原来的点
(代码很丑,马蜂及其不良好)
例如:
void solve1(){
deque<LL>q;
for(LL i=1;i<=n<<1;i++){
while(!q.empty()&&q.front()<i-n)q.pop_front();
if(i>n&&oil[q.front()-1]-l[q.front()-1]>=oil[i-n-1]-l[i-n-1])ans1[i-n]=1;
while(!q.empty()&&oil[q.back()-1]-l[q.back()-1]>=oil[i-1]-l[i-1])q.pop_back();
q.push_back(i);
}
}
它可能不能回来,是错的
应当调整入队和判对的顺序
改为:
void solve1(){
deque<LL>q;
for(LL i=1;i<=n<<1;i++){
while(!q.empty()&&q.front()<i-n)q.pop_front();
while(!q.empty()&&oil[q.back()-1]-l[q.back()-1]>=oil[i-1]-l[i-1])q.pop_back();
q.push_back(i);
if(i>n&&oil[q.front()-1]-l[q.front()-1]>=oil[i-n-1]-l[i-n-1])ans1[i-n]=1;
}
}
就对了