Advertisement
a53

Toorcmmdc

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