《塔纳的队列》解题报告
Hello, ladies and gentlemen, welcome to 智客airline.女士们先生们您好,欢迎搭乘csdn航空公司。
题目描述:塔纳终于有了和伦巴那酋长面谈的机会,可是在他前面还有很多各地来的进贡者也需要见酋长,所以塔纳被安排在了一个长长的队伍里面。这个队伍一共有n个人,人们等得很无聊,于是他们开始望来望去,想在队伍里寻找自己的族人。
队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的。
塔纳想计算出有多少对人可以互相看见,那么你能帮帮塔纳吗?
【输入样例1】
7
2 4 1 2 2 5 1
【输出样例1】
10
第四种方法(2重循环加速):
设变量Max(要大写m!!!)
再用if(Max<=a[i]&&Max<=a[j])判断
再用Max=Max(Max,a[j]);或if(Max<a[j]) Max=a[j];来比较
代码如下:
#include<bits/stdc++.h>
using namespace std;
int a[30000],n,k,cnt=0,i,j;
int main(){
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
}
for(i=1;i<=n-1;i++){
for(j=i+1;j<=n;j++){
for(k=i+1;k<=j-1;k++){
if(a[k]>a[i]||a[k]>a[j]){
break;
}
}
if(i+1==j||k>j-1){
cnt++;
}
if(a[j]>a[i]) break;
}
}
cout<<cnt;
return 0;
}