Advertisement
Guest User

Untitled

a guest
Jul 19th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. ///481
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5.  
  6. typedef long long int ll;
  7. typedef pair <ll, ll> pll;
  8.  
  9. const int Max = 1e5 + 10;
  10. const int Mod = 1e9 + 7;
  11. const ll Inf = 1LL << 62;
  12.  
  13. ll ar[Max];
  14. ll br[Max];
  15.  
  16. vector <ll> tree[3 * Max];
  17.  
  18. void build( int node, int l, int r ) {
  19.     if( l == r ) {
  20.         tree[node].push_back( br[l] );
  21.         return;
  22.     }
  23.     int mid = (l + r) >> 1;
  24.     int lf = node * 2;
  25.     int rt = node * 2 + 1;
  26.     build( lf, l, mid );
  27.     build( rt, mid + 1, r);
  28.     merge( tree[lf].begin(), tree[lf].end(), tree[rt].begin(), tree[rt].end(), back_inserter( tree[node] ) );
  29. }
  30.  
  31. int query( int node, int l, int r, int L, int R, ll val ) {
  32.     if( L > r || l > R ) {
  33.         return 0;
  34.     }
  35.     if( L <= l && r <= R ) {
  36.         return lower_bound( tree[node].begin(), tree[node].end(), val ) - tree[node].begin();
  37.     }
  38.     int mid = (l + r) >> 1;
  39.     int lf = node * 2;
  40.     int rt = node * 2 + 1;
  41.     int u = query( lf, l, mid, L, R, val );
  42.     int v = query( rt, mid+1, r, L, R, val );
  43.     return u + v;
  44. }
  45.  
  46. void scan( ll& num ) {
  47.     num = 0;
  48.     char c = getchar_unlocked();
  49.     int flag = 0;
  50.     while ( !((c >= '0' & c <= '9') || c == '-') ) {
  51.         c = getchar_unlocked();
  52.     }
  53.     if ( c == '-' ) {
  54.         flag = 1;
  55.         c = getchar_unlocked();
  56.     }
  57.     while ( c >= '0' && c <= '9' ) {
  58.         num = (num << 1) + (num << 3) + c - '0';
  59.         c = getchar_unlocked();
  60.     }
  61.     if ( flag == 1 ) {
  62.         num = 0 - num;
  63.     }
  64. }
  65.  
  66.  
  67. int main() {
  68. #ifdef Mr_Emrul
  69.     freopen("inputf.in", "r", stdin);
  70. #endif ///Mr_Emrul
  71.  
  72.     //ios_base::sync_with_stdio(false);
  73.     //cin.tie(0);
  74.    
  75.     int t, n;
  76.     scanf("%d", &t);
  77.     while( t-- ) {
  78.         scanf("%d", &n);
  79.         for( int i=1; i<=n; i++ ) {
  80.             scan(ar[i]);
  81.             //ar[i] = sqrt( ar[i] );
  82.             br[i] = ar[i] * 2LL;
  83.         }
  84.         for( int i=0; i<3*Max; i++ ) {
  85.             tree[i].clear();
  86.         }
  87.         build( 1, 1, n );
  88.         ll res = 0;
  89.         for( int i=2; i<=n; i++ ) {
  90.             res += query( 1, 1, n, 1, i-1, ar[i] + 1 );
  91.         } printf("%lld\n", res);
  92.     }
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement