社区讨论
70分,求大佬挑错。。。
P1091[NOIP 2004 提高组] 合唱队形参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mi6udkc9
- 此快照首次捕获于
- 2025/11/20 10:58 4 个月前
- 此快照最后确认于
- 2025/11/20 10:58 4 个月前
CPP
#include<stdio.h>
#include<cstring>
#include<limits.h>
#include<algorithm>
#define MAXN 110
using namespace std;
int n,temp1,temp2;
int hei[MAXN];
int a[MAXN],d[MAXN];
inline bool select(int key){
temp1=0;
int cnt=1;
for(int O=1;O<key;O++)
{
if(hei[O]<hei[key])
a[cnt++]=hei[O];
}
temp1=cnt-1;
return (cnt!=1);
}
inline bool transf(int key){
temp2=0;
int cnt=1;
for(int I=key+1;I<=n;I++)
{
if(hei[I]<hei[key])
a[cnt++]=-hei[I];
}
temp2=cnt-1;
return (cnt!=1);
}
inline void clad(){
memset(a,0,sizeof(a));
memset(d,0,sizeof(d));
}
inline int LIS(int n){
d[1]=a[1];
int len=1;
for(int i=2;i<=n;i++)
{
if (a[i]>d[len])d[++len]=a[i];
else
{
int j=upper_bound
(d+1,d+len+1,a[i])-d;
d[j]=a[i];
}
}
return len;
}
inline void TEST(int i,int x){
printf("test: %d,LIS=%d\n",i,x);
system("pause");
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&hei[i]);
int minn=INT_MAX;
for(int i=2;i<n;i++)
{
clad();
if(!select(i))continue;
int len1=LIS(temp1);
clad();
if(!transf(i))continue;
int len2=LIS(temp2);
//TEST(i,len1);
//TEST(i,len2);
int ans=n-len1-len2-1;
if(ans<minn)minn=ans;
}
printf("%d",minn);
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...