社区讨论
分块求调+1,咦感谢您
UVA12532 Interval Product参与者 1已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lp0stuhs
- 此快照首次捕获于
- 2023/11/16 14:17 2 年前
- 此快照最后确认于
- 2023/11/16 15:24 2 年前
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int N=100050;
int T;
int n,k;
int a[N];
char pd;
int l,v,r,zfs,zls;
bool lflag=0,cflag=0;
int fs[10001],ls[10001];
int main(){
//freopen("inter.in","r",stdin);
//freopen("inter.out","w",stdout);
while(cin>>n>>k){
memset(fs,0,sizeof(fs));
memset(ls,0,sizeof(ls));
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<=n/100;i++){
for(int j=0;j<=99;j++){
if(i*100+j==0)continue;
if((i*100+j)>n)break;
if(a[i*100+j]<0){
fs[i]++;
}else if(a[i*100+j]==0){
ls[i]++;
}
}
}
for(int q=1;q<=k;q++){
cin>>pd;
if(pd=='C'){
cin>>l>>v;
if(v<0){
if(a[l]==0){
ls[l/100]--;
fs[l/100]++;
}else if(a[l]>0){
fs[l/100]++;
}
}else if(v==0){
if(a[l]<0){
fs[l/100]--;
ls[l/100]++;
}else if(a[l]>0){
ls[l/100]++;
}
}else{
if(a[l]<0){
fs[l/100]--;
}else if(a[l]==0){
ls[l/100]--;
}
}
a[l]=v;
}if(pd=='P'){
zfs=0;zls=0;
lflag=0;
cflag=0;
cin>>l>>r;
if(l%100!=0){
for(int i=l;i<(l/100+1)*100;i++){
if(r<i){
cflag=1;
break;
}
if(a[i]<0)zfs++;
if(a[i]==0){
zls++;
lflag=1;
break;
}
}
}
if(lflag!=1){
for(int i=l/100+1;i<=r/100;i++){
zfs+=fs[i];
if(ls[i]>0){
zls++;
lflag=1;
break;
}
}
}
if(r%100!=99&&cflag!=1){
for(int i=r/100*100;i<=r;i++){
if(l>i)continue;
if(a[i]<0)zfs++;
if(a[i]==0){
zls++;
lflag=1;
break;
}
}
}
if(lflag==1){
cout<<"0";
}else if(zfs%2==0){
cout<<"+";
}else{
cout<<"-";
}
}
}
cout<<endl;
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...