Submission #1184041

#TimeUsernameProblemLanguageResultExecution timeMemory
1184041al95ireyizRadio (COCI22_radio)C++20
10 / 110
1601 ms252964 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, map<ll,bool>>
st tree[4*maxn], val;
st merge(st a, st b){
    if(a.fr or b.fr) return {1, {}};
    ll can = 0;
    for(auto [x, val] : b.sc){
        if(a.sc.count(x)){
            can = 1;
            break;
        }
        a.sc[x]=1;
    }
    if(can) return {1, {}};
    else return a;
}
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, {}};
}
map<ll, map<ll, bool>>memo;
map<ll, bool>gen(ll x){
    if(memo.count(x)) return memo[x];
    ll org = x;
    for(ll i=2;i<=x;i++){
        if(x%i == 0){
            memo[org][i]=1;
            while(x%i == 0) x /= i;
        }
    }
    if(x > 1) memo[org][x]=1;
    return memo[org];
}
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...