Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 KB | None | 0 0
  1. #include<set>
  2. #include <unordered_set>
  3. #include <unordered_map>
  4. #include<map>
  5. #include<list>
  6. #include<iomanip>
  7. #include<cmath>
  8. #include<string>
  9. #include<vector>
  10. #include<queue>
  11. #include<stack>
  12. #include<complex>
  13. #include<sstream>
  14. #include<iostream>
  15. #include<fstream>
  16. #include<algorithm>
  17. #include<numeric>
  18. #include<utility>
  19. #include<functional>
  20. #include<stdio.h>
  21. #include<assert.h>
  22. #include<memory.h>
  23. #include<bitset>
  24. #include<math.h>
  25. #include <string.h>
  26. #include <strings.h>
  27.  
  28.  
  29. #define f first
  30. #define s second
  31. #define mp make_pair
  32. #define pb push_back
  33. #define lp(i,a,n) for(int i=(a);i<=(int)(n);++i)
  34. #define lpd(i,a,n) for(int i=(a);i>=(int)(n);--i)
  35. #define clr(a,b) memset(a,b,sizeof a)
  36. #define all(v) v.begin(),v.end()
  37. #define println(a) cout <<(a) <<endl
  38. #define sz(x) ((int)(x).size())
  39. #define readi(x) scanf("%d",&x)
  40. #define read2i(x,y) scanf("%d%d",&x,&y)
  41. #define read3i(x,y,z) scanf("%d%d%d",&x,&y,&z)
  42. #define readll(x) scanf("%I64d",&x)
  43. #define mod 1000000007
  44. #define eps 1e-10
  45. #define infi 1000000000ll
  46. #define infll 1000000000000000000ll
  47.  
  48.  
  49. using namespace std;
  50. typedef long long ll;
  51. typedef pair<int, int> pii;
  52. typedef pair<ll, ll> pll;
  53. typedef vector<int> vi;
  54. typedef vector<vi> vvi;
  55. typedef vector<ll> vll;
  56. typedef set<int> si;
  57. typedef unordered_set<int> usi;
  58. typedef map<int,int> mii;
  59. typedef map<ll,ll> mll;
  60. typedef unordered_map<ll,ll> umll;
  61.  
  62. const int N = 250005 , A = 50002 , BLOCK_SIZE = 502;
  63.  
  64. int n,q,a[N],tree[BLOCK_SIZE][A],treeTemp[A];
  65.  
  66. void update(int i,int diff,int tree[]) {
  67. while(i<A) tree[i] += diff , i += i&-i;
  68. }
  69.  
  70. int getSum(int i,int tree[]) {
  71. int ret = 0;
  72. while (i > 0) ret += tree[i] , i -= i&-i;
  73. return ret;
  74. }
  75.  
  76.  
  77. int main(){
  78. scanf("%d",&n);
  79. lp(i, 1, n) scanf("%d",&a[i]) ,update(a[i],1,tree[i/BLOCK_SIZE]);
  80.  
  81. ll ans = 0;
  82. lpd(i, n, 1)
  83. ans += getSum(a[i]-1, treeTemp),update(a[i], 1, treeTemp);
  84.  
  85.  
  86. scanf("%d",&q);
  87. lp(i, 1, q) {
  88. int x,y;
  89. scanf("%d%d",&x,&y);
  90.  
  91. pll prev,cur;
  92. int blk_num = x/BLOCK_SIZE;
  93. lp(i, 0, blk_num-1)
  94. prev.f += getSum(A-2, tree[i])-getSum(a[x], tree[i]) , cur.f += getSum(A-2, tree[i])-getSum(y, tree[i]);
  95.  
  96. lp(i, blk_num+1, n/BLOCK_SIZE)
  97. prev.s += getSum(a[x]-1, tree[i]) , cur.s += getSum(y, tree[i]);
  98.  
  99. lp(i, blk_num*BLOCK_SIZE, x-1) prev.f += a[i]>a[x] , cur.f += a[i] > y;
  100.  
  101. lp(i, x+1, min((blk_num+1)*BLOCK_SIZE-1,n)) prev.s += a[x]>a[i] , cur.s += y>a[i];
  102.  
  103. ans += cur.f-prev.f+cur.s-prev.s;
  104.  
  105. update(a[x],-1,tree[x/BLOCK_SIZE]);
  106. update(y,1,tree[x/BLOCK_SIZE]);
  107.  
  108. a[x] = y;
  109. printf("%lld\n",ans);
  110. }
  111.  
  112. return 0;
  113. }
  114.  
  115.  
  116.  
  117. /*
  118. */
  119.  
  120. //ios::sync_with_stdio(0);cin.tie(0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement