hdu(4911)树状数组求逆序队

2015-01-27 06:07:34 · 作者: · 浏览: 7


就是每一次都把这个数所在的节点赋予1,那么如果此时他前面存在了1,那么说明前面的比他先出现,然而他又比前面的大,那么就说明了这是正序对,然后就把他加上前面的1数就好了,再用当前的数减去前面的正序?的个数就是逆序对

这道题必须要用

#include 
   
    
#include 
    
      #include 
     
       using namespace std; #define maxx 500050 int bit[maxx],a[maxx]; int n; struct node { int x,y; }pos[maxx]; bool cmp(node aa,node bb) { return aa.x
      
       0){ s+=bit[i]; i=i&(i-1); } return s; } void add(int i,int xx) { while(i<=n) { bit[i]+=xx; i+=i&-i; } } int k; void slove() { long long int ans=0; for(int j=0;j