Advertisement
Saleh127

Timus 1846

Jun 16th, 2021
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int t; cin>>t; for(int cs=1;cs<=t;cs++)
  5. ll a[100005];
  6. ll tree[400005];
  7.  
  8. void treeconstruct(ll node,ll b,ll e)
  9. {
  10.  
  11. if(b==e)
  12. {
  13. tree[node]=a[b];
  14. return;
  15. }
  16.  
  17. ll left = node*2;
  18. ll right = node*2 + 1ll;
  19.  
  20. ll mid=(b+e)/2;
  21.  
  22. treeconstruct(left,b,mid);
  23. treeconstruct(right,mid+1,e);
  24.  
  25. tree[node]=__gcd(tree[left],tree[right]);
  26.  
  27. }
  28.  
  29. ll queries(ll node,ll b,ll e,ll i,ll j)
  30. {
  31. if(i>e || j<b) return 0;
  32.  
  33. if(b>=i && e<=j) return tree[node];
  34.  
  35.  
  36. ll left = node*2;
  37. ll right = node*2 + 1ll;
  38.  
  39. ll mid=(b+e)/2;
  40.  
  41. ll x=queries(left,b,mid,i,j);
  42.  
  43. ll y=queries(right,mid+1,e,i,j);
  44.  
  45. return __gcd(x,y);
  46.  
  47. }
  48.  
  49. void update(ll node,ll b,ll e,ll i,ll newv)
  50. {
  51. if(i>e || i<b) return;
  52.  
  53. if(b>=i && e<=i)
  54. {
  55. tree[node]=newv;
  56. return;
  57. }
  58.  
  59. ll left = node*2;
  60. ll right = node*2 + 1ll;
  61.  
  62. ll mid=(b+e)/2;
  63.  
  64. update(left,b,mid,i,newv);
  65.  
  66. update(right,mid+1,e,i,newv);
  67.  
  68. tree[node]=__gcd(tree[left],tree[right]);
  69.  
  70. }
  71.  
  72. int main()
  73. {
  74. ios_base::sync_with_stdio(0);
  75. cin.tie(0);
  76. cout.tie(0);
  77.  
  78.  
  79. ll n,m,i,j,k,l=1;
  80.  
  81. map<ll,set<ll>>x;
  82. char c;
  83.  
  84. cin>>n;
  85.  
  86. treeconstruct(1,1,n);
  87.  
  88. for(i=1;i<=n;i++)
  89. {
  90. cin>>c>>m;
  91. if(c=='+')
  92. {
  93. update(1,1,n,l,m);
  94. x[m].insert(l);
  95. l++;
  96. }
  97. else
  98. {
  99. auto dd=x[m].begin();
  100. if(dd!=x[m].end())
  101. {
  102. update(1,1,n,*dd,0);
  103. x[m].erase(dd);
  104. }
  105. }
  106.  
  107. cout<<max(1ll,queries(1,1,n,1,n))<<endl;
  108. }
  109.  
  110. return 0;
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement