제출 #1184047

#제출 시각아이디문제언어결과실행 시간메모리
1184047al95ireyizRadio (COCI22_radio)C++20
10 / 110
1069 ms589824 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>> #define set unordered_set 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 : b.sc){ if(a.sc.count(x)){ can = 1; break; } a.sc.insert(x); } 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, {}}; } set<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].insert(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...