萌新全RE求助
查看原帖
萌新全RE求助
123808
幻之陨梦楼主2021/6/8 21:33

rt,注意了要先add,其他的地方不知道为什么错了,看了题解,查不出来哪里错了/ll

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
    int x=0,f=1;char c=getchar();
    while(c<'0' || c>'9'){if(c=='-') f=0;c=getchar();}
    while(c>='0' && c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return f?x:-x;
}
const int N=1e5+5,M=2e4+5;
struct node{int l,r,id,bl;}q[N];
bool cmp(node x,node y){return x.bl!=y.bl?x.l<y.l:((x.bl&1)?x.r<y.r:x.r>y.r);}
int n,m,blsiz,a[N],b[N],sum[N],l=1,r,tot,len[N],vis[N];
bitset<N>ans[M],cnt;
void del(int x){sum[a[x]]--;cnt[a[x]-sum[a[x]]]=0;}
void add(int x){cnt[a[x]+sum[a[x]]]=1;sum[a[x]]++;}
void sol(int x)
{
    m/=5; tot=0; l=1; r=0; cnt.reset();
    memset(sum,0,sizeof(sum));
    for(int i=1;i<=x;i++)
    {
        len[i]=vis[i]=0;
        for(int j=1;j<=3;j++)
        {
            int l=read(),r=read();
            tot++;
            q[tot]={l,r,i,(i-1)/blsiz+1};
            len[i]+=r-l+1;
        }
    }
    sort(q+1,q+tot+1,cmp);
    for(int i=1;i<=tot;i++)
    {
        while(l>q[i].l) add(--l);
        while(r<q[i].r) add(++r);
        while(l<q[i].l) del(l++);
        while(r>q[i].r) del(r--);
        if(!vis[q[i].id]){ans[q[i].id]=cnt;vis[q[i].id]=1;}
        else ans[q[i].id]&=cnt;
    }
    for(int i=1;i<=x;i++) printf("%lld\n",len[i]-3*ans[i].count());
}
signed main()
{
    n=read(),m=read();
    blsiz=n/sqrt(m);
    for(int i=1;i<=n;i++) a[i]=b[i]=read();
    sort(b+1,b+n+1);
    for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+n+1,a[i])-b;
    while(m)
    {
        if(m/5) sol(m/5);
        else sol(m);
    }
    return 0;
}
2021/6/8 21:33
加载中...