1 条题解

  • 0
    @ 2023-12-25 20:58:17

    #include<cstdio>

    #include<cstring>

    #include<algorithm>

    #include<set>

    usingnamespacestd;

    constintN=2e5+10;

    intn,a[N],l[N],s[N],w[N<<2];

    set<int> pre;

    voidChange(intx,intL,intR,intpos,intval){

    w[x]=val;

    if(L==R)return;

    intmid=(L+R)>>1;

    if(pos<=mid)Change(x*2,L,mid,pos,val);

    elseChange(x*2+1,mid+1,R,pos,val);

    return;

    }

    intAsk(intx,intL,intR,intl,intr){

    if(L==l&&R==r)returnw[x];

    intmid=(L+R)>>1;

    if(r<=mid)returnAsk(x*2,L,mid,l,r);

    if(l>mid)returnAsk(x*2+1,mid+1,R,l,r);

    returnmin(Ask(x*2,L,mid,l,mid),Ask(x*2+1,mid+1,R,mid+1,r));

    }

    intmain()

    {

    scanf("%d",&n);

    pre.insert(0);pre.insert(n+1);

    for(inti=1;i<=n;i++){

    scanf("%d",&a[i]);

    l[i]=*(--pre.upper_bound(a[i]));

    pre.insert(a[i]);

    }

    for(inti=0;i<=n+1;i++)

    Change(1,0,n+1,i,n+1);

    for(inti=n;i>=1;i--){

    intk=a[Ask(1,0,n+1,l[i],a[i])];

    if(k){

    s[a[Ask(1,0,n+1,l[i],a[i])]]++;

    s[a[i]]--;

    }

    Change(1,0,n+1,a[i],i);

    }

    for(inti=1;i<=n;i++)s[i]+=s[i-1];

    for(inti=0;i<=n;i++)printf("%d\n",s[i]);

    return0;

    }

    • 1

    信息

    ID
    7128
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    3
    已通过
    2
    上传者