Submission #1144181

#TimeUsernameProblemLanguageResultExecution timeMemory
11441810pt1mus23Radio (COCI22_radio)C++17
110 / 110
983 ms200300 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); vector<int> primes[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; for(auto v:primes[n]){ auto it = var[v].upper_bound(n); if(it!=var[v].end()){ mn=min(mn,*it); } } 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,x; while(q--){ char s; cin>>s; if(s=='S'){ int n; cin>>n; sw[n]^=1; if(sw[n]){ for(auto v:primes[n]){ // cout<<n<<" "<<v<<endl; auto it = var[v].upper_bound(n); if(it!=var[v].begin()){ --it; x = *it; // cout<<n<<" => "<<x<<endl; if(best[x]>n){ if(best[x]!=inf){ lst[best[x]].erase(x); } best[x]=n; lst[n].ins(x); st.upd(1,x,0,sze,n); } } } fnd(n); for(auto v:primes[n]){ var[v].ins(n); } } else{ if(best[n]!=inf){ lst[best[n]].erase(n); best[n]=inf; st.upd(1,n,0,sze,inf); } for(auto v:primes[n]){ var[v].erase(n); } // assert(lst[n].size()<5e1); for(auto v:lst[n]){ 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); for(int i =2;i<sze;i++){ if(primes[i].empty()){ for(int j=i;j<sze;j+=i){ primes[j].pb(i); } } } 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...