设为首页 加入收藏

TOP

hoj Counting the algorithms
2015-07-20 18:05:46 来源: 作者: 【 】 浏览:5
Tags:hoj Counting the algorithms

贪心加树状数组

给出的数据可能出现两种情况,包含与不包含,但我们从右向左删就能避免这个问题;

#include
  
   
#include
   
     #include
    
      using namespace std; const int maxn=200010; int f[maxn],l[maxn],a[maxn]; long long tree[maxn]; int n; inline int lowbit(int x) { return x&(-x); } void add(int pos,int x) { for(int i=pos;i<=2*n;i+=lowbit(i)) tree[i]+=x; } int getsum(int pos) { int sum=0; for(int i=pos;i>0;i-=lowbit(i)) sum+=tree[i]; return sum; } int main() { while(~scanf("%d",&n)) { memset(f,0,sizeof(f)); memset(l,0,sizeof(l)); for(int i=1;i<=2*n;i++) { scanf("%d",&a[i]); f[a[i]]==0?f[a[i]]=i:l[a[i]]=i; add(i,1); } long long ans=0; for(int i=1;i<2*n;i++) { //if(getsum(i)-getsum(i-1)>0) //{ if(f[a[i]]==0) continue; ans=ans+getsum(l[a[i]])-getsum(i-1)-1; add(i,-1); add(l[a[i]],-1); f[a[i]]=0; //} } printf("%lld\n",ans); } return 0; }
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇01背包水题篇之HDU3466――Proud .. 下一篇hdu4857 逃生 bestcoder round1 A

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: