Submission #1184038

#TimeUsernameProblemLanguageResultExecution timeMemory
1184038al95ireyizRadio (COCI22_radio)C++20
10 / 110
1603 ms234640 KiB
//*** Bismillah ***//
// It's the evening of another day. And the end of mine...
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#if !defined(ONLINE_JUDGE) and !defined(EVAL)
#include "template/debug.h"
#else
#define d(x...)
#endif
#define ll long long
const ll INF = 1e9;
const ll INFL = 1e18;
const ll MOD = 1e9 + 7;
const ll maxn = 1e6 + 5;
ll n,m,k=0;
#define fr first
#define sc second
#define st pair<ll, set<ll>>
st tree[4*maxn];
st merge(st a, st b){
    if(a.fr or b.fr) return {1, {}};
    ll can = 0;
    for(auto x : b.sc){
        if(a.sc.find(x) != a.sc.end()){
            can = 1;
            break;
        }
        a.sc.insert(x);
    }
    if(can) return {1, {}};
    else return a;
}
st val;
void upd(ll &x, ll l=1, ll r=n, ll v=1){
    if(l == r){
        tree[v] = val;
        return;
    }
    ll md = (l+r)>>1;
    if(x <= md) upd(x, l, md, v<<1);
    else upd(x, md+1, r, v<<1|1);
    tree[v] = merge(tree[v<<1], tree[v<<1|1]);
}
st get(ll _l, ll _r, ll l=1, ll r=n, ll v=1){
    bool in = _l <= l and r <= _r;
    bool ot = _l <= r and l <= _r;
    if(in){
        return tree[v];
    }
    if(ot){
        ll md = (l+r)>>1;
        return merge(
            get(_l, _r, l, md, v<<1),
            get(_l, _r, md+1, r, v<<1|1)
        );
    }
    return {0, {}};
}
set<ll>gen(ll x){
    set<ll>s;
    for(ll i=2;i<=x;i++){
        if(x%i == 0){
            s.insert(i);
            while(x%i == 0) x /= i;
        }
    }
    if(x > 1) s.insert(x);
    return s;
}
ll open[maxn];
void _(){
    cin>>n>>m;
    char c;
    for(ll i=0;i<m;i++){
        cin>>c;
        if(c == 'S'){
            ll x;
            cin>>x;
            if(!open[x]){
                val = {0, gen(x)};
                upd(x);
                open[x] = 1;
            }
            else{
                val = {0, {}};
                upd(x);
                open[x] = 0;
            }
        }
        else{
            ll l, r;
            cin>>l>>r;
            cout<<(get(l, r).fr ? "DA\n" : "NE\n");
        }
    }  
}
signed main(){
    auto testcaseruntime=clock();
    cin.tie(0)->sync_with_stdio(0);
    ll t=1;
    // cin>>t;
    while(t--){
        _();
    }
    cerr<<"\n\033[1;31mTime: \033[1;30m"
        <<(double)(clock()-testcaseruntime)/1000000<<"\033[1;32m seconds\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...