Advertisement
Guest User

Untitled

a guest
Jul 20th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <climits>
  6. using namespace std;
  7.  
  8. typedef long long ll;
  9. const ll INF = LLONG_MAX;
  10. ll k;
  11.  
  12. struct Q {
  13. ll l, r, ind;
  14. };
  15.  
  16. int main() {
  17. ll n, m;
  18. cin >> n >> m;
  19. k = sqrt(n) + 1;
  20. vector <ll> arr(n);
  21. for (ll i = 0; i < n; i++) {
  22. cin >> arr[i];
  23. }
  24. vector <Q> q;
  25. vector <ll> cur(1000000 + 1);
  26. for (ll i = 0; i < m; i++) {
  27. ll l, r;
  28. cin >> l >> r;
  29. l--, r--;
  30. Q tmp;
  31. tmp.l = l;
  32. tmp.r = r;
  33. tmp.ind = i;
  34. q.push_back(tmp);
  35. }
  36. sort(q.begin(), q.end(), [](Q a, Q b) {
  37. if (a.l / k != b.l / k) {
  38. return (a.l / k) < (b.l / k);
  39. }
  40. return a.r < b.r;
  41. });
  42. vector <ll> answer(m);
  43. ll l, r, sum = 0;
  44. for (ll i = q[0].l; i <= q[0].r; i++) {
  45. sum -= cur[arr[i]] * cur[arr[i]] * arr[i];
  46. cur[arr[i]]++;
  47. sum += cur[arr[i]] * cur[arr[i]] * arr[i];
  48. }
  49. answer[q[0].ind] = sum;
  50. l = q[0].l;
  51. r = q[0].r;
  52. for (ll i = 1; i < m; i++) {
  53. if (r < q[i].r) {
  54. for (ll j = r + 1; j <= q[i].r; j++) {
  55. sum -= cur[arr[j]] * cur[arr[j]] * arr[j];
  56. cur[arr[j]]++;
  57. sum += cur[arr[j]] * cur[arr[j]] * arr[j];
  58. }
  59. }
  60. if (l < q[i].l) {
  61. for (ll j = l; j < q[i].l; j++) {
  62. sum -= cur[arr[j]] * cur[arr[j]] * arr[j];
  63. cur[arr[j]]--;
  64. sum += cur[arr[j]] * cur[arr[j]] * arr[j];
  65. }
  66. }
  67. if (l > q[i].l) {
  68. for (ll j = l - 1; j >= q[i].l; j--) {
  69. sum -= cur[arr[j]] * cur[arr[j]] * arr[j];
  70. cur[arr[j]]++;
  71. sum += cur[arr[j]] * cur[arr[j]] * arr[j];
  72. }
  73. }
  74. if (r > q[i].r) {
  75. for (ll j = r; j > q[i].r; j--) {
  76. sum -= cur[arr[j]] * cur[arr[j]] * arr[j];
  77. cur[arr[j]]--;
  78. sum += cur[arr[j]] * cur[arr[j]] * arr[j];
  79. }
  80. }
  81. l = q[i].l;
  82. r = q[i].r;
  83. answer[q[i].ind] = sum;
  84. }
  85. for (auto now : answer) cout << now << endl;
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement