日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj2299 ( bit )

發布時間:2023/12/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj2299 ( bit ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樹狀數組求逆序數,先排個序,從大到小往插,計算在他的前面有幾個比他大,就是他的逆序數。

(PS:最近對數量越來越不敏感了,老在這上面錯。多做題,不能斷啊)

1 #include <cstdio> 2 #include<algorithm> 3 #include <vector> 4 using namespace std; 5 typedef long long i64; 6 struct po 7 { 8 int num,ord; 9 } p[500050]; 10 int a[500050]; 11 template<typename T = int> 12 struct BIT { 13 vector<T> a; 14 void init(int n) { 15 vector<T>(n+1).swap(a); 16 } 17 void add(int i, T v) { 18 for(int j = i + 1; j < (int)a.size(); j = (j|(j-1)) + 1) { 19 a[j] += v; 20 } 21 } 22 T sum(int i) const { 23 T ret = T(); 24 for(int j = i; j > 0; j = j & (j-1)) { 25 ret += a[j]; 26 } 27 return ret; 28 } 29 T get(int i) const { 30 return sum(i+1) - sum(i); 31 } 32 void set(int i, T v) { 33 add(i, v - get(i)); 34 } 35 }; 36 int cmp(po a,po b) 37 { 38 if(a.num>=b.num) return 1; 39 else return 0; 40 } 41 int main( ) { 42 int n; 43 while( scanf("%d", &n) != EOF&&n ) 44 { 45 BIT<int> bit; 46 bit.init(n); 47 for(int i=0;i<n;i++) 48 { 49 scanf("%d",&p[i].num); 50 p[i].ord=i; 51 } 52 sort(p,p+n,cmp); 53 i64 summ=0; 54 for(int i=0;i<n;i++) 55 { 56 bit.set(p[i].ord,1); 57 summ+=bit.sum(p[i].ord); 58 } 59 printf("%lld\n",summ); 60 } 61 return 0; 62 }

?

?

轉載于:https://www.cnblogs.com/Acgsws/p/3221893.html

總結

以上是生活随笔為你收集整理的poj2299 ( bit )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。