diff --git a/src/9/3/P3660.cpp b/src/9/3/P3660.cpp new file mode 100644 index 0000000..e752dd5 --- /dev/null +++ b/src/9/3/P3660.cpp @@ -0,0 +1,55 @@ +#include +#include +#include +#include +using ll = int64_t; + +ll n,ans=0; +std::vector vis,t,a; + +static inline ll lb(const ll n){ + return n&(-n); +} + +static inline void upd(ll idx,ll add){ + while(idx<=2*n){ // 注意要*2 + t[idx]+=add; + idx+=lb(idx); + } +} + +static inline ll get(ll idx){ + ll res=0; + while(idx){ + res+=t[idx]; + idx-=lb(idx); + } + return res; +} + +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::cin>>n; + a.resize(n*2+1); + vis.resize(n+1); + t.resize(n*2+1); + + for(ll i=1;i<=n*2;i++){ + std::cin>>a[i]; + } + + for(ll i=1;i<=n*2;i++){ + if(vis[a[i]]){ + ll nans=get(i)-get(vis[a[i]]); + ans+=nans; + // printf("%lld += %lld\n",i,nans); + upd(vis[a[i]], -1); + }else{ + upd(i, 1); + vis[a[i]]=i; + } + } + std::cout<