贪心策略:每加入一个数,如果之前已经存在它了,就直接交换
因此我们需要维护距离 就用树状数组好了
注意是2n
#include#define N 100005using namespace std;int n,tree[N],pre[N],ans;inline int lowbit(int x){ return x&(-x);}inline void update(int x,int del){ for(int i=x;i<=2*n;i+=lowbit(i)) tree[i]+=del;} inline int query(int x){ int ans=0; for(int i=x;i;i-=lowbit(i)) ans+=tree[i]; return ans;}int main(){ scanf("%d",&n); for(int i=1,x;i<=2*n;i++) { scanf("%d",&x); if(!pre[x]) { pre[x]=i; update(i,1); } else { ans+=query(i)-query(pre[x]); update(pre[x],-1); } } cout<