Advertisement
a53

E-GCD Party

a53
Jul 5th, 2022
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. ifstream fin("GCDP.in");
  5. ofstream fout("GCDP.out");
  6.  
  7. int n, a[100002][18];
  8. long long s[100002];
  9.  
  10. // cel mai mare divizor comun
  11. int cmmdc(int a, int b)
  12. {
  13. while (b)
  14. {
  15. int r = a % b;
  16. a = b;
  17. b = r;
  18. }
  19.  
  20. return a;
  21. }
  22.  
  23. // returneaza cmmdc pe intervalul [x, y]
  24. int sub(int x, int y)
  25. {
  26. int j = log2(y - x + 1);
  27.  
  28. return cmmdc(a[x][j], a[y - (1 << j) + 1][j]);
  29. }
  30.  
  31. long long suma(long long x, long long y)
  32. {
  33. return 1LL * (x + y) * (y - x + 1) / 2;
  34. }
  35.  
  36. int main()
  37. {
  38. // citire
  39. fin >> n;
  40.  
  41. for (int i = 1; i <= n; i++)
  42. {
  43. fin >> a[i][0];
  44. }
  45.  
  46. // RMQ
  47.  
  48. for (int j = 1; (1 << j) <= n; j++)
  49. for (int i = 1; i + (1 << j) - 1 <= n; i++)
  50. a[i][j] = cmmdc(a[i][j - 1], a[i + (1 << (j - 1))][j - 1]);
  51.  
  52. for (int i = 1; i <= n; i++)
  53. {
  54. int poz = i, l, r;
  55.  
  56. l = 1, r = i;
  57.  
  58. while (l <= r)
  59. {
  60. int m = (l + r) / 2;
  61.  
  62. if (sub(m, i) == 1)
  63. l = m + 1;
  64. else
  65. {
  66. poz = m;
  67. r = m - 1;
  68. }
  69. }
  70.  
  71. s[i] = s[i - 1] + (long long)(i - poz + 1);
  72. }
  73.  
  74. for (int i = 1; i <= n; i++)
  75. {
  76. if(a[i][0] == 1)
  77. {
  78. fout << "0 ";
  79. continue;
  80. }
  81. int poz = i, l, r;
  82.  
  83. l = i, r = n;
  84.  
  85. while (l <= r)
  86. {
  87. int m = (l + r) / 2;
  88.  
  89. if (m - (s[m] - s[m - 1]) + 1 <= i)
  90. {
  91. poz = m;
  92. l = m + 1;
  93. }
  94. else
  95. r = m - 1;
  96. }
  97.  
  98. long long aux = s[poz] - s[i - 1] - suma(0, poz - i);
  99. fout << aux << ' ';
  100. }
  101.  
  102. return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement