Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define ll long long
- #define N ((int)6e4 + 5)
- #define MOD ((int)1e9 + 7)
- #define MAX ((int)1e9 + 7)
- #define MAXL ((ll)1e18 + 7)
- #define MAXP ((int)1e3 + 7)
- #define thr 1e-8
- #define pi acos(-1) /// pi = acos ( -1 )
- #define fastio ios_base::sync_with_stdio(false),cin.tie(NULL)
- #define endl "\n"
- using namespace std;
- int isPrime[N/32 + 2];
- bool IsPrime(int num) /// returns 1 for prime
- {
- if(num == 2) return 1;
- if((num & 1) == 0) return 0;
- int idx = num >> 5 , bit = num & 31;
- if( ( isPrime[idx] & (1<<bit) ) != 0 ) return 0;
- else return 1;
- }
- vector < int > Sieve(int n)
- {
- for(int i = 3; i * i <= n ; i += 2){
- if(IsPrime(i)){
- for(int j = i * i ; j <= n ; j += i<<1){
- int idx = j >> 5 , bit = j & 31;
- isPrime[idx] = isPrime[idx] | (1<<bit);
- }
- }
- }
- vector < int > prime;
- prime.push_back(2);
- for(int i = 3 ; i <= n ; i += 2){
- if(IsPrime(i)) prime.push_back(i);
- }
- return prime;
- }
- vector < int > primeSet[N];
- bool isOn[N];
- int primes[N];
- int main()
- {
- vector < int > prime = Sieve(1e5);
- int n , m;
- cin>>n>>m;
- for(int p:prime){
- for(int multiple = p ; multiple <= n ; multiple += p){
- primeSet[multiple].push_back(p);
- }
- } /// O( n*ln(n) )
- while(m--){
- char opp;
- int coll;
- cin>>opp>>coll;
- if(opp == '+'){
- if(isOn[coll]) cout<<"Already on\n";
- else{
- bool conflict = 0;
- for(int p:primeSet[coll]){
- if(primes[p] > 0){
- conflict = 1;
- cout<<"Conflicts with "<<primes[p]<<endl;
- break;
- }
- }
- if(conflict == 0){
- cout<<"Success\n";
- isOn[coll] = 1;
- for(int p:primeSet[coll]) primes[p] = coll;
- }
- }
- }
- else{
- if(isOn[coll] == 0) cout<<"Already off\n";
- else{
- isOn[coll] = 0;
- cout<<"Success\n";
- for(int p:primeSet[coll]) primes[p] = 0;
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement