社区讨论

这个题分块也行吧

UVA12532 Interval Product参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lp0jbj46
此快照首次捕获于
2023/11/16 09:50
2 年前
此快照最后确认于
2023/11/16 13:38
2 年前
查看原帖
代码
CPP
#include<bits/stdc++.h>
using namespace std;
#define re register
const int N=1e5+10,K=450;
struct node{
	int l,r;
	int sumf;//负的数的数量 
	int vis;//有无0 
}kuai[K];
int n,k,len,loc[N],a[N],cnt;
inline int read(){
	int f=0,fu=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')fu=-1;c=getchar();}
	while(c>='0'&&c<='9'){f=(f<<3)+(f<<1)+c-48;c=getchar();}
	return f*fu;
}
inline void write(int x){
	if(x<0)x=(x^-1)+1,putchar('-');
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
void update(int x,int k){
	int in=loc[x];
	if(k==0){
		if(a[x]==0)return ;
		if(a[x]<0)kuai[in].sumf--;
		kuai[in].vis++;
		a[x]=0;
		return ;
	}
	if(k<0){
		if(a[x]<0)return ;
		if(a[x]==0)kuai[in].vis--;
		kuai[in].sumf++;
		a[x]=k;
		return ;
	}
	if(k>0){
		if(a[x]>0)return ;
		if(a[x]==0)kuai[in].vis--;
		kuai[in].sumf--;
		a[x]=k;
		return ;
	}
}
int query(int l,int r){
	int sf=0;
	int st=loc[l],en=loc[r];
	if(st==en){
		for(int i=l;i<=r;i=-~i){
			if(a[i]>0)sf++;
			if(a[i]==0)return 0;
		}
	}else{
		for(int i=l;i<=kuai[st].r;i=-~i){
			if(a[i]>0)sf++;
			if(a[i]==0)return 0;
		}
		for(int i=kuai[en].l;i<=r;i=-~i){
			if(a[i]>0)sf++;
			if(a[i]==0)return 0;
		}
		for(int i=st+1;i<en;i=-~i){
			if(kuai[i].vis)return 0;
			sf+=kuai[i].sumf;
		}
	}
	if(sf%2==0)return 1;
	else return -1;
}
inline void init(){
	memset(kuai,0,sizeof kuai);
}
int main(){
	freopen("inter.in","r",stdin);
	freopen("inter.out","w",stdout);
	while(cin>>n>>k){
		init();
		len=sqrt(n);
		for(int i=1;i<=n;i++){
			a[i]=read();
			if(i%len==1){
				kuai[++cnt].l=i;
				kuai[cnt].vis=0;
			}
			loc[i]=cnt;
			kuai[cnt].r=i;
			if(a[i]<0)kuai[cnt].sumf++;
			if(a[i]==0)kuai[cnt].vis=1;
		}
		int l,r;char op;
		while(k--){
			cin>>op;
			l=read(),r=read();
			if(op=='C'){
				update(l,r);
			}else{
				int bl=query(l,r);
				if(bl>0)cout<<"+";
				else if (bl==0)cout<<"0";
				else cout<<"-";
			}
		}
		puts("");
	}
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...