WA 0pts 求条
查看原帖
WA 0pts 求条
1171250
w132326820楼主2025/7/30 12:56
#include <bits/stdc++.h>
using namespace std;
const int N=2000010,K=700000,inf=0x3f3f3f3f;
int n,m,a[N],s[N],num[N],lc[N],rc[N],idx,f[N],rt;
void add(int &p,int l,int r,int x,int y){
    if(!p)p=++idx;
    if(l==r){
        num[p]=min(num[p],y);
        return ;
    }
    int mid=(l+r)>>1;
    if(x<=mid)add(lc[p],l,mid,x,y);
    else add(rc[p],l,r,x,y);
}
int query(int p,int l,int r,int ql,int qr){
    if(!p)p=++idx;
    if(l==r)return num[p];
    int mid=(l+r)>>1,res=inf;
    if(ql<=mid)res=min(res,query(lc[p],l,mid,ql,qr));
    if(mid<qr)res=min(res,query(rc[p],mid+1,r,ql,qr));
    return res;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)num[i]=inf;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]==2)a[i]=-1;
        s[i]=s[i-1]+a[i];
    }
    f[1]=1;
    for(int i=2;i<=n;i++){
        int k=query(rt,0,2*K,s[i]-m+K,s[i]+m+K);
        f[i]=k+1;
        add(rt,0,2*K,s[i],f[i]);
    }
    cout<<f[n];
    return 0;
}
2025/7/30 12:56
加载中...