fork download
  1. import java.util.*;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int t = sc.nextInt();
  7.  
  8. while (t-- > 0) {
  9. int m = sc.nextInt();
  10. int n = sc.nextInt();
  11.  
  12. int[] b = new int[n + 15];
  13. int[] k1 = new int[n + 15], k5 = new int[n + 15];
  14. long[] sum_k1 = new long[n + 15], sum_k5 = new long[n + 15];
  15. long[] sumr_k1 = new long[n + 15], sumr_k5 = new long[n + 15];
  16.  
  17. int p1 = 0, p2 = 0;
  18.  
  19. for (int i = 1; i <= n; i++) {
  20. b[i] = sc.nextInt();
  21. if (b[i] == 1 || b[i] == 3) {
  22. p1++;
  23. k1[i] = i;
  24. }
  25. if (b[i] == 2 || b[i] == 3) {
  26. p2++;
  27. k5[i] = i;
  28. }
  29. }
  30.  
  31. for (int i = 1; i <= n; i++) {
  32. sum_k1[i] = k1[i] + sum_k1[i - 1];
  33. sum_k5[i] = k5[i] + sum_k5[i - 1];
  34. }
  35.  
  36. for (int i = n; i >= 1; i--) {
  37. sumr_k1[i] = k1[i] + sumr_k1[i + 1];
  38. sumr_k5[i] = k5[i] + sumr_k5[i + 1];
  39. }
  40.  
  41. int c1 = 0, c2 = 0;
  42.  
  43. for (int i = 1; i <= n; i++) {
  44. if (k1[i] > 0) {
  45. c1++;
  46. }
  47.  
  48. long d1 = (long) i * c1 - sum_k1[i];
  49. long d2 = sumr_k1[i] - (long) i * p1;
  50. long r1 = d1 + d2;
  51.  
  52. if (k1[i] > 0) {
  53. p1--;
  54. }
  55.  
  56. if (k5[i] > 0) {
  57. c2++;
  58. }
  59.  
  60. long d5 = (long) i * c2 - sum_k5[i];
  61. long d6 = sumr_k5[i] - (long) i * p2;
  62. long r5 = d5 + d6;
  63.  
  64. if (k5[i] > 0) {
  65. p2--;
  66. }
  67.  
  68. System.out.print(Math.abs(r1 - r5) + " ");
  69. }
  70. System.out.println();
  71. }
  72.  
  73. sc.close();
  74. }
  75. }
  76.  
Success #stdin #stdout 0.21s 56868KB
stdin
2
1 5
2 1 3 0 1
1 8
1 1 3 0 2 0 3 3
stdout
5 2 1 0 1 
3 2 1 4 7 8 9 10