【BZOJ1106】【POI2007】立方體大作戰tet(樹狀陣列+貪心)
阿新 • • 發佈:2018-12-30
貪心策略:每加入一個數,如果之前已經存在它了,就直接交換
因此我們需要維護距離 就用樹狀陣列好了
注意是2n
#include<bits/stdc++.h> #define N 100005 using 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<<ans; return 0; }