样例不能过求助(玄关)
查看原帖
样例不能过求助(玄关)
1287433
__ycy1124__楼主2024/10/22 17:17
#include<bits/stdc++.h>
#define mid (a[p].l+a[p].r>>1)
using namespace std;
int zs[100001];
int tot,n,q;
int nex[1000001];
bool pd(int n){
	for(int j=1;j<=tot&&zs[j]*zs[j]<=n;j++){
		if(n%zs[j]==0){
			return 0;
		}
	}
	return 1;
}
set<int>s[100001];
struct Node{
	int l,r,w;
	bool bj=0;
}a[4000001];
vector<int>t[1000001];
void New_Tree(int p,int l,int r){
	a[p].l=l;
	a[p].r=r;
	a[p].w=1e9;
	if(l==r){
		nex[a[p].l]=1e9;
		return;
	}
	New_Tree(p*2,l,mid);
	New_Tree(p*2+1,mid+1,r);
}
void Push_up(int p){
	a[p].w=min(a[p*2].w,a[p*2+1].w);
	return;
}
void Find_nex(int p,int x){
	if(a[p].l==a[p].r){
		int mi=1e9;
		for(auto it:t[x]){
			mi=min(mi,*s[it].upper_bound(x));
		}
		a[p].w=mi;
		return;
	}
	if(mid>x){
		Find_nex(p*2,x);
	}
	else{
		Find_nex(p*2+1,x);
	}
	Push_up(p);
}
void Merge(int p,int x){
	if(a[p].l==a[p].r){
		if(a[p].bj){
			nex[x]=1e9;
			for(auto it:t[x]){
				s[it].erase(x);
				auto xx=s[it].upper_bound(x);
				--xx;
				Find_nex(1,*xx);
			}
		}
		else{
			for(auto it:t[x]){
				s[it].insert(x);
				auto xx=s[it].upper_bound(x);
				--xx;
				Find_nex(1,*xx);
			}
			Find_nex(1,x);
		}
		a[p].bj=!a[p].bj;
		return;
	}
	if(mid<x){
		Merge(p*2+1,x);
	}
	else{
		Merge(p*2,x);
	}
	Push_up(p);
}
int Find(int p,int l,int r){
	if(a[p].l>=l&&a[p].r<=r){
		return a[p].w;
	}
	if(l>mid){
		return Find(p*2+1,l,r);
	}
	else if(r<=mid){
		return Find(p*2,l,r);
	}
	else{
		return min(Find(p*2+1,l,r),Find(p*2,l,r));
	}
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>q;
	for(int i=2;i<=n;i++){
		if(pd[i]){
			zs[++tot]=i;
			s[tot].insert(1000001);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=tot&&zs[j]<=i;j++){
			if(i%zs[j]==0){
				t[i].push_back(j);
			}
		}
	}
	New_Tree(1,1,n);
	for(int i=1;i<=q;i++){
		char ch;
		cin>>ch;
		if(ch=='S'){
			int x;
			cin>>x;
			Merge(1,x);
		}
		else{
			int l,r;
			cin>>l>>r;
//			cout<<Find(1,l,r)<<'\n';
			if(Find(1,l,r)<=r){
				cout<<"DA\n";
			}
			else{
				cout<<"NE\n";
			}
		}
	}
	return 0;
}
2024/10/22 17:17
加载中...