Submission #1144166

#TimeUsernameProblemLanguageResultExecution timeMemory
11441660pt1mus23Radio (COCI22_radio)C++20
0 / 110
1602 ms195080 KiB
#pragma GCC optimize("O1")
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define ins insert
#define pb  push_back
#define pii pair<int,int>
#define endl '\n' 
#define all(x) x.begin(),x.end()

const int mod = 998244353;
const int inf = INT_MAX;
const int LG  = 18;
const int sze = 1e6+23;

struct segtree{
    vector<int>  T;
    segtree(int n){
        T.resize(n*4+23,inf);
    }
    void upd(int node,int idx,int l,int r,int v){
        if(l==r){
            T[node]=v;
            return;
        }
        int mid = (l+r)/2;
        if(idx<=mid){
            upd(2*node,idx,l,mid,v);
        }
        else{
            upd(2*node +1,idx,mid+1,r,v);
        }
        T[node]=min(T[node*2],T[node*2 +1]);
    }
    int qry(int node,int l,int r,int lx,int rx){
        if(rx<l || lx>r){
            return inf;
        }
        if(l<=lx && rx<=r){
            return T[node];
        }
        int mid = (lx+rx)/2;
        return min(qry(2*node,l,r,lx,mid),qry(2*node+1 ,l,r,mid+1,rx));
    }

} st(sze);
set<int> var[sze];
int res[sze];
set<int> lst[sze];
int best[sze];
int sw[sze];
void fnd(int n){
    if(!sw[n]){
        return;
    }
    int mn = inf,b;
    for(int x = 2;x*x<=n;x++){
        if(n%x==0){
            auto it = var[x].upper_bound(n);
            if(it!=var[x].end()){
                mn=min(mn,*it);
            }

            b = n/x;
            if(b!=x){
                auto it2 = var[b].upper_bound(n);
                if(it2!=var[b].end()){
                    mn=min(mn,*it2);
                }
            }

        }
    }
    if(mn!=inf){
        lst[mn].ins(n);
    }
    best[n]=mn;
    st.upd(1,n,0,sze,mn);
}
void fast(){
    // return;
    int n,q;
    cin>>n>>q;
    for(int i=0;i<=n;i++){
        best[i]=inf;
    }
    int b;
    while(q--){
        char s;
        cin>>s;
        if(s=='S'){
            int n;
            cin>>n;
            sw[n]^=1;
            if(sw[n]){
                // ekle
                for(int i=2;i*i<=n;i++){
                    if(n%i==0){
                        auto it2 = var[i].upper_bound(n);
                        // cout<<n<<" =>"<<i<<endl;
                        if(it2!=var[i].begin()){
                            --it2;
                            // cout<<"sa"<<endl;
                            if(best[*it2]>n){
                                // cout<<n<<" => "<<*it2<<endl;
                                if(best[*it2]!=inf){
                                    lst[best[*it2]].erase(*it2);
                                }
                                best[*it2]=n;
                                lst[n].ins(*it2);
                                st.upd(1,*it2,0,sze,n);
                            }
                        }
                        b =n/i;
                        if(b!=i){
                            auto it= var[b].upper_bound(n);
                            if(it!=var[b].begin()){
                                --it;
                                if(best[*it]>n){
                                    // cout<<n<<" => "<<*it<<endl;
                                    if(best[*it]!=inf){
                                        lst[best[*it]].erase(*it);
                                    }
                                    best[*it]=n;
                                    lst[n].ins(*it);
                                    st.upd(1,*it,0,sze,n);
                                }
                            }
                        }
                    }
                }
                fnd(n);
                var[n].ins(n);
                for(int i=2;i*i<=n;i++){
                    if(n%i==0){
                        var[i].ins(n);
                        b=n/i;
                        if(b!=i){
                            var[b].ins(n);
                        }
                    }
                }
            }
            else{
                best[n]=inf;
                st.upd(1,n,0,sze,inf);
                var[n].erase(n);
                for(int i=2;i*i<=n;i++){
                    if(n%i==0){
                        var[i].erase(n);
                        b=n/i;
                        if(b!=i){
                            var[b].erase(n);
                        }
                    }
                }
                for(auto v:lst[n]){
                    if(sw[v]){
                        fnd(v);
                    }
                }
                lst[n].clear();
            }
        }
        else{
            // qry
            int l,r;
            cin>>l>>r;
            int x = st.qry(1,l,r,0,sze);
            // cout<<l<<" "<<r<<" "<<x<<endl;
            if(x<=r){
                cout<<"DA\n";
            }
            else{
                cout<<"NE\n";
            }
        }
    }
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int tt =1;

    // cin>>tt;
    while(tt--){
        fast();
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...