Submission #1184051

#TimeUsernameProblemLanguageResultExecution timeMemory
1184051al95ireyizRadio (COCI22_radio)C++20
110 / 110
1458 ms221628 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, vector<ll>> st tree[4*maxn], val; st merge(st a, st b){ if(a.fr or b.fr) return {1, {}}; ll can = 0; vector<ll>&x = a.sc; vector<ll>&y = b.sc; ll l1 = x.size(), l2 = y.size(); ll i = 0, j = 0; vector<ll>z; while(i < l1 or j < l2){ if(i == l1) z.push_back(y[j++]); else if(j == l2) z.push_back(x[i++]); else{ if(x[i] < y[j]) z.push_back(x[i++]); else if(x[i] > y[j]) z.push_back(y[j++]); else{ can = 1; break; } } } if(can) return {1, {}}; else return {0, z}; } 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, {}}; } vector<ll>mp[maxn]; ll open[maxn]; void _(){ cin>>n>>m; for(ll i=2;i<=n;i++){ if(!mp[i].empty()) continue; for(ll j=i;j<=n;j+=i){ mp[j].push_back(i); } } char c; for(ll i=0;i<m;i++){ cin>>c; if(c == 'S'){ ll x; cin>>x; if(!open[x]){ val = {0, mp[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...