题目的大概意思就是让你求出修改之后最长子数组的值。
题解:
- 找到修改之后与修改之前,第一个修改的数字的下标left,和最后一个修改的数字下标right,可以肯定的是这一段(left到right)数组一定是单调不减的数组。
- 在找到left和right的情况下,就往两边扩展,直到找到不符合条件的数字为止。
- 最后判断一下是否越界,处理一下越界情况。
代码:
#include<bits/stdc++.h>
using namespace std;
int t;
int main(){
cin>>t;
while(t--){
int m;
cin>>m;
int a[m+10],b[m+10],left=-1,right=-1;
for(int i=1;i<=m;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>b[i];
if(b[i]!=a[i]&&left==-1){
left=i;
}else if(b[i]!=a[i]&&left!=-1){
right=i;
}
}
for(;left>=1;left--){
if(b[left-1]>b[left])
break;
}
for(;right<=m;right++){
if(b[right+1]<b[right])
break;
}
if(left==0){
left=1;
}
if(right>m){
right=m;
}
cout<<left<<' '<<right<<endl;
}
return 0;
}