题意:有一长度为\(n\)的序列,问是否能找到\(a_{i}<a_{j},a_{j}>a_{k},(i<j<k)\),如果满足,输出其位置.
题解:直接暴力两头找即可,最坏复杂度:\(O(n^2)\).
代码:
int t;
int n;
int a[N];
int main() {
ios::sync_with_stdio(false);cin.tie(0);
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;++i) cin>>a[i];
bool ok=0;
for(int j=1;j<=n;++j){
int pos1=-1;
int pos2=-1;
for(int i=1;i<j;++i){
if(a[i]<a[j]){
pos1=i;
break;
}
}
if(pos1==-1) continue;
for(int k=j+1;k<=n;++k){
if(a[k]<a[j]){
pos2=k;
break;
}
}
if(pos1!=pos2 && pos1!=-1 && pos2!=-1){
ok=1;
cout<<"YES"<<endl;
cout<<pos1<<" "<<j<<" "<<pos2<<endl;
break;
}
}
if(!ok) cout<<"NO"<<endl;
}
return 0;
}
Educational Codeforces Round 91 (Rated for Div. 2) A. Three Indices (模拟)
原文:https://www.cnblogs.com/lr599909928/p/13322044.html