Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.68 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int maxi=300;
  5. unordered_map<int,int> len,gcdv;
  6. unordered_multiset<int> bucket[maxi*5];
  7. unordered_multiset<int>::iterator it;
  8.  
  9. ifstream in("toorcmmdc.in");
  10. ofstream out("toorcmmdc.out");
  11.  
  12. void solve(int l)
  13. {
  14. int gcd=-1;
  15. for(int i=1;i<=l;i++)
  16. if(gcdv[i]!=-1)
  17. if(gcd!=-1)
  18. gcd=__gcd(gcd,gcdv[i]);
  19. else
  20. gcd=gcdv[i];
  21. if(gcd==-1)
  22. gcd=1;
  23. out<<gcd<<'\n';
  24. }
  25.  
  26. int update(unordered_multiset<int> &v)
  27. {
  28. if(!v.size())
  29. return -1;
  30. int gcd=*v.begin();
  31. for(auto i:v)
  32. gcd=__gcd(gcd,i);
  33. return gcd;
  34. }
  35.  
  36. int main()
  37. {
  38. char c;
  39. int n,x,l=0;
  40. in>>n;
  41. for(int i=1;i<=n;i++)
  42. {
  43. in>>c>>x;
  44. if(c=='+')
  45. {
  46. if(l==0 || len[l]==300)
  47. {
  48. l++;
  49. gcdv[l]=x;
  50. len[l]=1;
  51. bucket[l].insert(x);
  52. }
  53. else
  54. {
  55. if(len[l])
  56. gcdv[l]=__gcd(gcdv[l],x);
  57. else
  58. gcdv[l]=x;
  59. len[l]++;
  60. bucket[l].insert(x);
  61. }
  62. solve(l);
  63. }
  64. else
  65. {
  66. for(int j=1;j<=l;j++)
  67. {
  68. it=bucket[j].find(x);
  69. if(bucket[j].find(x)!=bucket[j].end())
  70. {
  71. bucket[j].erase(it);
  72. len[j]--;
  73. gcdv[j] = update(bucket[j]);
  74. break;
  75. }
  76. }
  77. solve(l);
  78. }
  79. }
  80. return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement