求助,玄关100pts
查看原帖
求助,玄关100pts
1382038
linruicong_gegeji楼主2025/7/22 15:54

题面
T飞了

#include<bits/stdc++.h>
using namespace std;
int cnt,a[100005],x,f[100005],ans1,ans2=1,tmp,c[100005];
bool mak;
int main()
{
    while(scanf("%d",&x)!=EOF) a[++cnt]=x;
    priority_queue<int,vector<int>,greater<int> > xg;
    f[1]=1;
    xg.push(0x7f7f7f7f);
    // scanf("%d",&cnt);
    // for(int i=1;i<=cnt;i++) scanf("%d",&a[i]);
    for(int i=1;i<=cnt;i++)
    {
        for(int j=1;j<i;j++)
        {
            if(a[i]<=a[j]) f[i]=max(f[j]+1,f[i]);
            else f[i]=max(f[i],1);
        }
    }
    for(int i=1;i<=cnt;i++)
    {
        memset(c,0,sizeof c);
        mak=0;
        for(int j=1;j<=ans2;j++)
        {
            tmp=xg.top();
            xg.pop();
            c[++c[0]]=tmp;
            if(tmp<a[i]) continue;
            tmp=min(tmp,a[i]);
            mak=1;
            c[c[0]]=tmp;
            break;
        }
        if(mak==0)
        {
            ans2++;
            xg.push(a[i]);
        }
        for(int j=1;j<=c[0];j++) xg.push(c[j]);

    }
    for(int i=1;i<=cnt;i++) ans1=max(ans1,f[i]);
    printf("%d\n",ans1);
    printf("%d",ans2);
    return 0;
}
2025/7/22 15:54
加载中...