Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int gcd(int a, int b);
  6.  
  7. //int* computelogs(int m);
  8.  
  9. void query(int** st,int l, int r);
  10.  
  11. int** build(int* arr, int n);
  12.  
  13. int gcd(int a, int b){
  14. int tmp;
  15. while(b){
  16. tmp = a % b;
  17. a = b;
  18. b = tmp;
  19. }
  20. return a;
  21. }
  22.  
  23. /*int* computelogs(int m){
  24. int nel=1<<m;
  25. int* lg=(int*)malloc(nel*sizeof(int));
  26. int i=1, j=0;
  27. lg[0]=0;
  28. lg[1]=0;
  29. while (i<m){
  30. while (j<(1<<i)){
  31. lg[j]=i-1;
  32. j+=1;
  33. }
  34. i+=1;
  35. }
  36. return lg;
  37. }*/
  38.  
  39. void query(int** st,int l, int r){
  40. int j=log2(r-l+1);
  41. int v = gcd(st[l][j], st[r-(1<<j)+1][j]);
  42. printf("%d\n", v);
  43. }
  44.  
  45. int** build(int* arr, int n){
  46. int m=log2(n)+1;
  47. int** st=(int**)malloc(n*sizeof(int*));
  48. for (int i=0; i<n; i++) st[i]=(int*)malloc(m*sizeof(int));
  49. int i=0;
  50. while (i<n){
  51. st[i][0]=arr[i];
  52. i+=1;
  53. }
  54. int j=1;
  55. while (j<m){
  56. i=0;
  57. while (i<=n-(1<<j)){
  58. st[i][j]=gcd(st[i][j-1], st[i+(1<<j-1)][j-1]);
  59. i+=1;
  60. }
  61. j+=1;
  62. }
  63. return st;
  64. }
  65.  
  66. int main (int argc, char** argv){
  67. int m, n;
  68. scanf("%d", &n);
  69. int* arr=(int*)malloc(n*sizeof(int));
  70. for (int i=0; i<n; i++) scanf("%d", &arr[i]);
  71. for (int i=0; i<n; i++) arr[i] = abs(arr[i]);
  72. scanf("%d", &m);
  73. //int* lg = computelogs(n);
  74. int** st = build(arr, n);
  75. for (int i=0; i<m; i++){
  76. int l, r;
  77. scanf("%d%d", &l, &r);
  78. query(st, l, r);
  79. }
  80. free(arr);
  81. for (int i=0; i<n; i++) free(st[i]);
  82. free(st);
  83. //free(lg);
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement