社区讨论
分块,求调,调了一下午了,悬关
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 条回复,欢迎继续交流。
正在加载回复...