fork download
  1. #pragma GCC optimize ("Ofast")
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. void *wmem;
  5. char memarr[96000000];
  6. template<class T> inline void walloc1d(T **arr, int x, void **mem = &wmem){
  7. static int skip[16] = {0, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
  8. (*mem) = (void*)( ((char*)(*mem)) + skip[((unsigned long long)(*mem)) & 15] );
  9. (*arr)=(T*)(*mem);
  10. (*mem)=((*arr)+x);
  11. }
  12. template<class T> struct segtree_Point_Prod{
  13. int N;
  14. int logN;
  15. T *mul;
  16. void malloc(int maxN, int once = 0){
  17. int i;
  18. for(i=1;i<maxN;i*=2){
  19. ;
  20. }
  21. mul = new T[2*i];
  22. if(once){
  23. setN(maxN);
  24. }
  25. }
  26. void walloc(int maxN, int once = 0, void **mem = &wmem){
  27. int i;
  28. for(i=1;i<maxN;i*=2){
  29. ;
  30. }
  31. walloc1d(&mul, 2*i, mem);
  32. if(once){
  33. setN(maxN);
  34. }
  35. }
  36. void free(void){
  37. delete [] mul;
  38. }
  39. T& operator[](int i){
  40. return mul[N+i];
  41. }
  42. void setN(int n, int zerofill = 1, int dobuild = 1){
  43. int i;
  44. for(i=1,logN=0;i<n;i*=2,logN++){
  45. ;
  46. }
  47. N = i;
  48. if(zerofill){
  49. for(i=(0);i<(N);i++){
  50. mul[N+i] = 0;
  51. }
  52. }
  53. if(dobuild){
  54. build();
  55. }
  56. }
  57. void build(void){
  58. int i;
  59. for(i=N-1;i;i--){
  60. mul[i] = mul[2*i] * mul[2*i+1];
  61. }
  62. }
  63. inline void build(int a){
  64. while(a > 1){
  65. a /= 2;
  66. mul[a] = mul[a*2] * mul[a*2+1];
  67. }
  68. }
  69. inline void change(int a, T val){
  70. mul[a+N] = val;
  71. build(a+N);
  72. }
  73. inline void add(int a, T val){
  74. mul[a+N] += val;
  75. build(a+N);
  76. }
  77. inline T getProd(int a, int b){
  78. T res;
  79. T tmp;
  80. int fga = 0;
  81. int fgb = 0;
  82. a += N;
  83. b += N;
  84. while(a < b){
  85. if(a%2){
  86. if(fga){
  87. res = res * mul[a];
  88. }
  89. else{
  90. res = mul[a];
  91. fga = 1;
  92. }
  93. a++;
  94. }
  95. if(b%2){
  96. b--;
  97. if(fgb){
  98. tmp = mul[b] * tmp;
  99. }
  100. else{
  101. tmp = mul[b];
  102. fgb = 1;
  103. }
  104. }
  105. a /= 2;
  106. b /= 2;
  107. }
  108. if(fga==1 && fgb==0){
  109. return res;
  110. }
  111. if(fga==0 && fgb==1){
  112. return tmp;
  113. }
  114. if(fga==1 && fgb==1){
  115. res = res * tmp;
  116. return res;
  117. }
  118. return res;
  119. }
  120. }
  121. ;
  122. #define main dummy_main
  123. int main(){
  124. wmem = memarr;
  125. return 0;
  126. }
  127. #undef main
  128. int fg;
  129. int cnt;
  130. segtree_Point_Prod<unsigned> t;
  131. class ProductOfNumbers{
  132. public:
  133. ProductOfNumbers(){
  134. if(fg==0){
  135. fg = 1;
  136. t.malloc(40000);
  137. }
  138. t.setN(40000,1,0);
  139. t.build();
  140. cnt = 0;
  141. }
  142. void add(int num){
  143. t.change(cnt++, num);
  144. }
  145. int getProduct(int k){
  146. return t.getProd(cnt-k, cnt);
  147. }
  148. }
  149. ;
  150. // cLay varsion 20200214-1
  151.  
  152. // --- original code ---
  153. // #define main dummy_main
  154. // {}
  155. // #undef main
  156. //
  157. // int fg, cnt;
  158. // segtree_Point_Prod<unsigned> t;
  159. //
  160. // class ProductOfNumbers {
  161. // public:
  162. // ProductOfNumbers() {
  163. // if(fg==0){
  164. // fg = 1;
  165. // t.malloc(40000);
  166. // }
  167. // t.setN(40000,1,0);
  168. // t.build();
  169. // cnt = 0;
  170. // }
  171. //
  172. //
  173. // void add(int num) {
  174. // t.change(cnt++, num);
  175. // }
  176. //
  177. // int getProduct(int k) {
  178. // return t.getProd(cnt-k, cnt);
  179. // }
  180. // };
  181.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
stdout
Standard output is empty