Free Contest 115 - GCD

Xem dạng PDF

Gửi bài giải

Điểm: 0,50 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài

Lưu ý: các bạn không nhập, xuất dữ liệu bằng file kể cả khi đề bài có yêu cầu. Đọc, ghi dữ liệu được thực hiện ở stdin và stdout.


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    ngoccaidu2008  đã bình luận lúc 9, Tháng 10, 2025, 13:23

    code tham khảo nhé:

    #pragma GCC optimize("O2")
    #pragma GCC target("avx,avx2,fma")
    #include <bits/stdc++.h>
    using namespace std;
    #define __Hormer_Nguyen__ signed main()
    #define file(name) if (fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
    const int maxn=5+1e5;
    struct v
    {
        int a,b;
    };
    vector<v>q;
    set<int>st;
    int t,x,n,Gcd[4*maxn+10];
    map<int,int>id;
    map<int,int>cnt;
    void seg(int v,int l,int r)
    {
        if (l==r)
        {
            Gcd[v]=0;
            return;
        }int m=(l+r)/2;
        seg(2*v,l,m);
        seg(2*v+1,m+1,r);
        Gcd[v]=0;
    }
    void update(int v,int l,int r,int pos,int val)
    {
        if (pos<l || pos>r) return;
        if (l==pos && r==pos)
        {
            Gcd[v]=val;
            return;
        }int m=(l+r)/2;
        update(2*v,l,m,pos,val);
        update(2*v+1,m+1,r,pos,val);
        Gcd[v]=__gcd(Gcd[2*v],Gcd[2*v+1]);
    }
    __Hormer_Nguyen__
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        //cout<<"helo1"<<endl;
        cin>>n;
        q.resize(n+5);
        for (int i=0;i<n;i++)
        {
            cin>>t>>x;
            st.insert(x);
            q[i].a=t;q[i].b=x;
        }//cout<<"helo2"<<endl;
        vector<int>vt(st.begin(),st.end());
        int node=vt.size();
        for (int i=0;i<vt.size();i++) id[vt[i]]=i;
        seg(1,0,node-1);
        //cout<<"helo3"<<endl;
        for (int i=0;i<n;i++)
        {
            int tl=q[i].a;
            int val=q[i].b;
            int chiso=id[val];
            if (tl==1)
            {
                cnt[val]++;
                if (cnt[val]==1) update(1,0,node-1,chiso,val);
            }else
            {
                cnt[val]--;
                if (cnt[val]==0) update(1,0,node-1,chiso,0);
            }cout<<Gcd[1]<<endl;
        }
    }