社区讨论

分块,求调,调了一下午了,悬关

UVA12532 Interval Product参与者 1已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@lp0xnl9o
此快照首次捕获于
2023/11/16 16:32
2 年前
此快照最后确认于
2023/11/16 18:21
2 年前
查看原帖
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=100050;
int n,k;
int kz[10005];
int a[N];
int dyk[N];
int ls[10005];
int kj;
char pd;
int zk,yk;
int da;
int lflag;
void gai(int gs,int gc){
	kj=dyk[gs];
	if(a[gs]<0){
		kz[kj]=kz[kj]*-1;
	}else if(a[gs]==0){
		ls[kj]--;
	}
	if(gc<0){
		kz[kj]=kz[kj]*-1;
	}else if(gc==0){
		ls[kj]++;
	}
	a[gs]=gc;
	return ;
}
void cha(int l,int r){
	zk=dyk[l];yk=dyk[r];
	da=1;
	if(zk==yk){
		for(int i=l;i<=r;i++){
			if(a[i]<0){
				da*=-1;
			}else if(a[i]==0){
				da=0;
				break;
			}
		}
	}else{
		for(int i=l;i<(zk+1)*100;i++){
			if(a[i]<0){
				da*=-1;
			}else if(a[i]==0){
				da=0;
				break;
			}
		}
		if(da!=0){
			for(int i=zk+1;i<yk;i++){
				if(ls[i]>0){
					da=0;
					break;
				}else{
					da*=kz[i];
				}
			}
		}
		if(da!=0){
			for(int i=yk*100;i<=r;i++){
				if(a[i]<0){
					da*=-1;
				}else if(a[i]==0){
					da=0;
					break;
				}
			}
		}
	}
	return ;
}
int l,v,r;
int main(){
	//freopen("inter.in","r",stdin);
	//freopen("inter.out","w",stdout);
	while(cin>>n>>k){
		memset(kz,1,sizeof(kz));
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		for(int i=1;i<=n;i++){
			kj=i/100;
			dyk[i]=kj;
			if(a[i]<0){
				kz[kj]*=-1;
			}else if(a[i]==0){
				ls[kj]++;
			}
		}
		for(int i=1;i<=k;i++){
			cin>>pd;
			if(pd=='C'){
				scanf("%d%d",&l,&v);
				gai(l,v);
			}else{
				scanf("%d%d",&l,&r);
				cha(l,r);
				if(da==0){
					cout<<"0";
				}else if(da<0){
					cout<<"-";
				}else{
					cout<<"+";
				}
			}	
		}
		cout<<endl;
	}
	return 0;
} 

回复

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

正在加载回复...