社区讨论
90分二分优化求助
P1091[NOIP 2004 提高组] 合唱队形参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo8bu0cl
- 此快照首次捕获于
- 2023/10/27 16:03 2 年前
- 此快照最后确认于
- 2023/10/27 16:03 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
int n, h[105];
int minout = INT_MAX;
int up[105], down[105];
void getls(int pos){ // ... pos-1, pos, pos+1 ... maxh = h[pos]
if(pos == 2 && h[pos-1] >= h[pos]) return ;
if(pos == n-2 && h[pos+1] >= h[pos]) return ;
memset(up, 0, sizeof(up));
memset(down, 0, sizeof(down));
int u = 1, d = 1;
up[1] = h[1];
down[1] = h[pos];
for(int i = 2; i <= pos; i++){
if(h[i] >= h[pos]) continue;
if(h[i] > up[u]) up[++u] = h[i];
else{
int p = lower_bound(up+1, up+u+1, h[i]) - up;
up[p] = h[i];
}
}
for(int i = pos+1; i <= n; i++){
if(h[i] >= h[pos]) continue;
if(h[i] < down[d]) down[++d] = h[i];
else{
int p = lower_bound(down+1, down+d+1, h[i], greater<int>()) - down;
down[p] = h[i];
}
}
minout = min(minout, n - (u+d));
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n;
for(int i = 1; i <= n; i++) cin >> h[i];
for(int i = 2; i <= n-1; i++) getls(i);
cout << minout << endl;
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...