社区讨论
这个题分块也行吧
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 条回复,欢迎继续交流。
正在加载回复...