| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
暴力超时了/(ㄒoㄒ)/~~#include<iostream>
#define MAXN 50001
using namespace std;
//找出每个数i右边第一个小于等于他的数在哪 记为right
//然后在这个数和right-1之间内找一个最大值在pos,相同取最左
//则len=pos-i即为所求
int stick[MAXN] = { 0 };
//棍子长度
void getLen(int n) {
int max = -1;
for (int i = 0; i < n; i++) {
int cur = stick[i];
//记录当前棍子长度
int pos;
int right =n;
for (int r = i+1; r <n; r++ ) {
//找右边小于等于它的
if (stick[r] <= cur) {
right = r;
break;
}
}
pos = i;
for (int j = pos+1; j < right; j++) {
//找最大
if (stick[j] > stick[pos]) {
pos = j;
}
}
int len = pos - i;
if (len && len > max) {
//如果len不为零并且大于max
max = len;
}
}
cout << max << endl;
}
int main() {
int n;
while(~scanf_s("%d", &n)){
for (int i = 0; i < n; i++) {
cin >> stick[i];
}
getLen(n);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator