Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- const int maxi=300;
- unordered_map<int,int> len,gcdv;
- unordered_multiset<int> bucket[maxi*5];
- unordered_multiset<int>::iterator it;
- ifstream in("toorcmmdc.in");
- ofstream out("toorcmmdc.out");
- void solve(int l)
- {
- int gcd=-1;
- for(int i=1;i<=l;i++)
- if(gcdv[i]!=-1)
- if(gcd!=-1)
- gcd=__gcd(gcd,gcdv[i]);
- else
- gcd=gcdv[i];
- if(gcd==-1)
- gcd=1;
- out<<gcd<<'\n';
- }
- int update(unordered_multiset<int> &v)
- {
- if(!v.size())
- return -1;
- int gcd=*v.begin();
- for(auto i:v)
- gcd=__gcd(gcd,i);
- return gcd;
- }
- int main()
- {
- char c;
- int n,x,l=0;
- in>>n;
- for(int i=1;i<=n;i++)
- {
- in>>c>>x;
- if(c=='+')
- {
- if(l==0 || len[l]==300)
- {
- l++;
- gcdv[l]=x;
- len[l]=1;
- bucket[l].insert(x);
- }
- else
- {
- if(len[l])
- gcdv[l]=__gcd(gcdv[l],x);
- else
- gcdv[l]=x;
- len[l]++;
- bucket[l].insert(x);
- }
- solve(l);
- }
- else
- {
- for(int j=1;j<=l;j++)
- {
- it=bucket[j].find(x);
- if(bucket[j].find(x)!=bucket[j].end())
- {
- bucket[j].erase(it);
- len[j]--;
- gcdv[j] = update(bucket[j]);
- break;
- }
- }
- solve(l);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement