81分,TLE两个
  • 板块P1638 逛画展
  • 楼主LiaoYF1
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/12/30 12:26
  • 上次更新2023/10/24 06:08:35
查看原帖
81分,TLE两个
633466
LiaoYF1楼主2022/12/30 12:26

是做法不对吗,二分一个 bab-a

#include<iostream>
#include<cstring>
using namespace std;
int n,m,a[1000005],q[1000005],ansl,ansr;
bool t[2005];
bool check(int x){
    int l=1,r=0;
    for(int i=1;i<=n;i++){
        while(l<=r&&i-q[l]>x)l++;
        memset(t,0,sizeof(t));
        q[++r]=i;
        for(int i=l;i<=r;i++){
            t[a[q[i]]]=1;
        }
        bool flag=0;
        for(int i=1;i<=m;i++){
            if(!t[i]){
                flag=1;
                break;
            }
        }
        //cout<<flag<<"\n";
        if(flag==0){
            ansl=q[l],ansr=q[r];
            return 1;
        }
    }
    //cout<<x<<"\n";
    return 0;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int l=0,r=n;
    while(l<=r){
        int mid=(l+r)/2;
        if(check(mid)){
            r=mid-1;
        }else{
            l=mid+1;
        }
    }
    cout<<ansl<<" "<<ansr;
    return 0;
}
2022/12/30 12:26
加载中...