fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5.  
  6.  
  7. int n, m;
  8. cin >> n >> m;
  9. vector<int> arr(m + 1);
  10.  
  11. vector<long long> a(m + 2);
  12. vector<long long> k(m + 2);
  13.  
  14. long long tot_a = 0;
  15. long long tot_k = 0;
  16.  
  17. for (int i = 1; i <= m; i++) {
  18. cin >> arr[i];
  19.  
  20. if (arr[i] == 1) {
  21. a[i] = i;
  22. tot_a++;
  23. }
  24. else if (arr[i] == 2) {
  25. k[i] = i;
  26. tot_k++;
  27. }
  28. else if (arr[i] == 3) {
  29. a[i] = i;
  30. k[i] = i;
  31. tot_k++;
  32. tot_a++;
  33. }
  34. }
  35.  
  36.  
  37. vector<long long> prefix_a(m + 2), prefix_k(m + 2), suffix_a(m + 2), suffix_k(m + 2);
  38.  
  39. for (int i = 1; i <= m; i++) {
  40. prefix_a[i] = prefix_a[i - 1] + a[i];
  41. prefix_k[i] = prefix_k[i - 1] + k[i];
  42. }
  43. for (int i = m; i >= 1; i--) {
  44. suffix_a[i] = suffix_a[i + 1] + a[i];
  45. suffix_k[i] = suffix_k[i + 1] + k[i];
  46. }
  47.  
  48. long long x = 0;
  49. long long y = 0;
  50.  
  51. for (int i = 1; i <= m; i++) {
  52.  
  53. if (arr[i] == 1 || arr[i] == 3) x++;
  54. if (arr[i] == 2 || arr[i] == 3) y++;
  55.  
  56. long long left = i * x - prefix_a[i];
  57. long long right = suffix_a[i + 1] - i * (tot_a - x);
  58. long long r1 = left + right;
  59.  
  60. long long l = i * y - prefix_k[i];
  61. long long r = suffix_k[i + 1] - i * (tot_k - y);
  62. long long r2 = l + r;
  63.  
  64. cout << (long long)abs(r1 - r2) << " ";
  65.  
  66.  
  67.  
  68.  
  69. }
  70. }
Success #stdin #stdout 0.01s 5316KB
stdin
1 8
1 1 3 0 2 0 3 3
stdout
3 2 1 4 7 8 9 10