ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1091 [NOIP2004 提高组] 合唱队形(求升序序列的N^2复杂度的模板)

2021-04-08 21:32:09  阅读:166  来源: 互联网

标签:NOIP2004 f1 f2 int len -- P1091 long 升序


#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int M = 1e5 + 1;
int a[M]; 
int f[3][M];
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < i; j++) {
            if(a[j]<a[i])
            f[0][i] = max(f[0][i], f[0][j] + 1);
        }
    }
    for (int i = n; i >= 1; i--) {
        for (int j = n + 1; j > i; j--) {
            if(a[j]<a[i])
            f[1][i] = max(f[1][i], f[1][j] + 1);
        }
    }
    int mx = 0;
    for (int i = 1; i <= n; i++) {
        mx = max(f[0][i] + f[1][i] -1,mx);
    }
    cout << n-mx << endl;
}
二分写法
#include <bits/stdc++.h> using namespace std; #define ll long long const int M = 1e5 + 1; int a[M]; int f1[M]; int f2[M]; int l[M]; int r[M]; int n; inline void solve1() { int len=1; l[1]=1; f1[1]=a[1]; for(int i=2;i<=n;i++){ if(a[i]>f1[len]) f1[++len]=a[i]; else{ int p=lower_bound(f1+1,f1+len+1,a[i])-f1; f1[p]=a[i]; } l[i]=len; } } inline void solve2() { int len=1; r[1]=1; f2[1]=a[n]; for(int i=n-1;i>=1;i--){ if(a[i]>f2[len]) f2[++len]=a[i]; else{ int p=lower_bound(f2+1,f2+len+1,a[i])-f2; f2[p]=a[i]; } r[i]=len; } } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } solve1(); solve2(); int mx=1e3; for(int i=1;i<=n;i++){ mx=min(mx,n-l[i]-r[i+1]); } cout<<mx<<endl; }

 

标签:NOIP2004,f1,f2,int,len,--,P1091,long,升序
来源: https://www.cnblogs.com/BlogBaudelaire/p/14634966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有