Advertisement
a53

inno

a53
May 17th, 2021
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define NMAX 200005
  3. using namespace std;
  4. ifstream fin("inno.in");
  5. ofstream fout("inno.out");
  6. int n, k, a[NMAX], st[NMAX], dr[NMAX], x=-1, y;
  7. long long val, sol;
  8. int count_bit(int v)
  9. {
  10. int c=0;
  11. v = v - ((v >> 1) & 0x55555555);
  12. v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
  13. c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
  14. return c;
  15. }
  16. int bsearch(int p, int u, int key)
  17. {
  18. int m=0;
  19. while(p < u) {
  20. m = (p + u) / 2;
  21. if(dr[m] & key<k)
  22. p = m + 1;
  23. else
  24. u = m;
  25. }
  26.  
  27. m = (p + u) / 2;
  28. if(dr[m]&key<k)
  29. ++ m;
  30. return m;
  31. }
  32. int main()
  33. {
  34. fin>>n>>k;
  35. for(int i=1; i<=n; ++i)
  36. fin>>a[i];
  37. st[1]=a[1];
  38. dr[n]=a[n];
  39. for(int i=2; i<=n; ++i)
  40. st[i]=(st[i-1])&(a[i]);
  41. for(int i=n-1; i>=1; i--)
  42. dr[i]=(dr[i+1])&(a[i]);
  43. if(count_bit(st[1])<k)
  44. x=0;
  45. if(count_bit(dr[n])<k)
  46. y=n+1;
  47. if(x<0)
  48. {
  49. x=1;
  50. int i=2;
  51. while(i<=n)
  52. {
  53. if(count_bit(st[i])>=k)
  54. x=i;
  55. i++;
  56. }
  57. }
  58. if(!y)
  59. {
  60. y=n;
  61. int i=n-1;
  62. while(i>=1)
  63. {
  64. if(count_bit(dr[i])>=k)
  65. y=i;
  66. i--;
  67. }
  68. }
  69. if(x==n)
  70. fout<<n*(n+1)/2;
  71. else if(x==0 && y==n+1)
  72. fout<<0;
  73. else if(x>=1 && x<n && y==n+1)
  74. fout<<x;
  75. else if(x==0 && y>1 && y<=n)
  76. fout<<n-y+1;
  77. else if(x==0 && y==0)
  78. fout<<1;
  79. else
  80. {
  81. sol=n-y+1;
  82. for(int i=1; i<=x; ++i)
  83. {
  84. val=bsearch(y,n,st[i]);
  85. sol+=(n-val+2);
  86. }
  87. fout<<sol;
  88. }
  89. return 0;
  90. }
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement