wa零分?!我觉得自己写的cdq没问题
查看原帖
wa零分?!我觉得自己写的cdq没问题
606022
atomicbomb楼主2022/7/13 18:30
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&-x)
int qread()
{
    int res=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-') f*=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        res=res*10+ch-'0';
        ch=getchar();
    }
    return res;
}
struct point
{
    int a,b,res;
}s[100010];
bool cmp(point x,point y)
{
    return x.a>y.a;
}
bool cmp2(point x,point y)
{
    return x.b>y.b;
}
bool cmp3(point x,point y)
{
    return x.a<y.a;
}
int n,m;
int hmap[100010],tree[200010];
void add(int x,int num)
{
    while(x<=100000)
    {
        tree[x]+=num;
        x+=lowbit(x);
    }
}
int query(int x)
{
    int res=0;
    while(x)
    {
        res+=tree[x];
        x-=lowbit(x);
    }
    return res;
}
void cdq(int l,int r)
{
    if(l==r) return;
    int mid=(l+r)>>1;
    cdq(l,mid);
    cdq(mid+1,r);
    sort(s+l,s+mid+1,cmp);
    sort(s+mid+1,s+r+1,cmp);
    int i=mid+1,j=l;
    for(;i<=r;i++)
    {
        while(j<=mid&&s[i].a<s[j].a)
        {
            add(s[j].b,1);
            j++;
        }
        s[i].res+=query(s[i].b);
    }
    for(i=l;i<j;i++) add(s[i].b,-1);
    i=l,j=mid+1;
    sort(s+l,s+mid+1,cmp3);
    sort(s+mid+1,s+r+1,cmp3);
    for(;i<=mid;i++)
    {
        while(j<=r&&s[i].a>s[j].a)
        {
            add(s[j].b,1);
            j++;
        }
        s[i].res+=query(s[i].b);
    }
    for(i=mid+1;i<j;i++) add(s[i].b,-1);
}
int ans;
void ni()
{
    for(int i=1;i<=n;i++)
    {
        ans+=query(s[i].a);
        add(s[i].a,1);
    }
    for(int i=1;i<=n;i++) add(s[i].a,-1);
}
int main()
{
    n=qread(),m=qread();
    for(int i=1;i<=n;i++)
    {
        s[i].a=qread();
        s[i].b=1;
        hmap[s[i].a]=i; //数字映射的位置
    }
    ni();
    for(int i=1;i<=m;i++)
    {
        int k=qread();
        s[hmap[k]].b=m-i+2;
    }
    cdq(1,n);
    sort(s+1,s+n+1,cmp2);
    for(int i=1;i<=m;i++)
    {
        printf("%d\n",ans);
        ans-=s[i].res;
    }
    return 0;
}

只过了样例

2022/7/13 18:30
加载中...