LGP3157 [CQTS 2011] 动态逆序对 学习笔记

LGP3157 [CQTS 2011] 动态逆序对 学习笔记

Luogu Link

题意简述

给出 \(1\sim n\) 的一个排列。按给定的顺序依次删除 \(m\) 个元素。求出每次删除前整个序列的逆序对数。

做法解析

我们来分析贡献。

代码实现

#include <bits/stdc++.h>
using namespace std;
namespace obasic{
    typedef long long lolo;
    template <typename _T>
    void readi(_T &x){
        _T k=1;x=0;char ch=getchar();
        for(;!isdigit(ch);ch=getchar())if(ch=='-')k=-1;
        for(;isdigit(ch);ch=getchar())x=(x<<3)+(x<<1)+ch-'0';
        x*=k;return;
    }
    template <typename _T>
    void writi(_T x){
        if(x<0)putchar('-'),x=-x;
        if(x>9)writi(x/10);
        putchar(x%10+'0');
    }
};
using namespace obasic;
const int MaxN=1e5+5;
int N,M,X,pos[MaxN];lolo ans[MaxN];
struct anob{int x,y,z;}A[MaxN];
bool cmpx(anob a,anob b){return a.x!=b.x?a.x>b.x:a.y<b.y;}
bool cmpy(anob a,anob b){return a.y<b.y;}
struct BinidTree{
    int n,t[MaxN];
    void init(int x){n=x,fill(t,t+n+1,0);}
    int lowbit(int x){return x&(-x);}
    void add(int p,int x){for(;p<=n;p+=lowbit(p))t[p]+=x;}
    int gts(int p){int res=0;for(;p;res+=t[p],p-=lowbit(p));return res;}
    int getsum(int l,int r){return gts(r)-gts(l-1);}
}BiT;
void cdqdac(int l,int r){
    if(l==r)return;int mid=(l+r)>>1,p,q;
    cdqdac(l,mid),cdqdac(mid+1,r);
    sort(A+l,A+mid+1,cmpy),sort(A+mid+1,A+r+1,cmpy);
    p=l,q=mid+1;for(;q<=r;q++){
        for(;p<=mid&&A[p].y<A[q].y;p++)BiT.add(A[p].z,1);
        ans[A[q].x]+=BiT.getsum(A[q].z,N);
    }
    for(int i=l;i<p;i++)BiT.add(A[i].z,-1);
    p=mid,q=r;for(;q>mid;q--){
        for(;p>=l&&A[p].y>A[q].y;p--)BiT.add(A[p].z,1);
        ans[A[q].x]+=BiT.getsum(1,A[q].z);
    }
    for(int i=mid;i>p;i--)BiT.add(A[i].z,-1);
}
int main(){
    readi(N),readi(M);BiT.init(N);
    for(int i=1;i<=N;i++)readi(A[i].z),A[i].y=i,A[i].x=M+1,pos[A[i].z]=i;
    for(int i=1;i<=M;i++)readi(X),A[pos[X]].x=i;
    sort(A+1,A+N+1,cmpx);cdqdac(1,N);
    for(int i=M;~i;i--)ans[i]+=ans[i+1];
    for(int i=1;i<=M;i++)writi(ans[i]),puts("");
    return 0;
}

反思总结

posted @ 2025-02-21 08:51  矞龙OrinLoong  阅读(8)  评论(0)    收藏  举报