题解,求点赞
2025-08-18 17:03:52
发布于:广东
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int vec[N],n;
void solve(int ca){
if(ca1){
cin>>n;
for(int i=1;i<=n;i++)cin>>vec[i];
}
else{
int k;
cin>>k;
while(k--){
int x,y;
cin>>x>>y;
vec[x]=y;
}
}
deque<pair<int,int>>dq1,dq2;
for(int j=1;j<=n;j)dq1.push_back(make_pair(vec[j],j));
int ans;
while(true){
if(dq1.size()+dq2.size()==2){
ans=1;
break;
}
int small=dq1.front().first;
int big,id;
dq1.pop_front();
if(dq2.size()==0||dq1.size()!=0&&dq1.back()>dq2.back()){
big=dq1.back().first,id=dq1.back().second;
dq1.pop_back();
}
else{
big=dq2.back().first,id=dq2.back().second;
dq2.pop_back();
}
pair<int,int>cur={big-small,id};
if(dq1.size()==0||dq1.front()>cur){
ans=dq1.size()+dq2.size()+2;
int cnt=0;
while(true){
cnt;
if(dq1.size()+dq2.size()+12){
if(cnt%2==0)ans--;
break;
}
if(dq2.size()==0||dq1.size()!=0&&dq1.back()>dq2.back()){
big=dq1.back().first,id=dq1.back().second;
dq1.pop_back();
}
else{
big=dq2.back().first,id=dq2.back().second;
dq2.pop_back();
}
cur={big-cur.first,id};
if((dq1.size()==0||cur<dq1.front())&&(dq2.size()==0||cur<dq2.front())){
}
else{
if(cnt%2==0)ans--;
break;
}
}
break;
}
else dq2.push_front(cur);
}
cout<<ans<<endl;
}
int main(){
int t;cin>>t;
for(int i=1;i<=t;i++)solve(i);
return 0;
}
这里空空如也
有帮助,赞一个