只过了#4#5#6 30分,其他全re,显示
Runtime Error.
Received signal 11: Segmentation fault with invalid memory reference.
#include<bits/stdc++.h>
#define ll long long
#define dd long double
#define lson (id*2)
#define rson (id*2+1)
#define mid ((l+r)/2)
using namespace std;
inline ll read(){
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
void write(ll x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9){
write(x/10);
}
putchar(x%10+'0');
}
const ll N=1e6+9;
ll c;
struct TREE{
bool l,r,u,d,p,q;
ll y;//右
}tr[N*4];
bool con[N*4][10];
void pu(TREE &x,TREE l,TREE r){
x.l=l.l||(l.u&&con[l.y][1]&&r.l&&con[l.y][2]&&l.d);
x.r=r.r||(r.u&&con[l.y][1]&&l.r&&con[l.y][2]&&r.d);
x.u=(l.u&&con[l.y][1]&&r.u)||(l.p&&con[l.y][2]&&r.q);
x.d=(l.d&&con[l.y][2]&&r.d)||(l.q&&con[l.y][1]&&r.p);
x.p=(l.u&&con[l.y][1]&&r.p)||(l.p&&con[l.y][2]&&r.d);
x.q=(r.u&&con[l.y][1]&&l.q)||(r.q&&con[l.y][2]&&l.d);
}
void build(ll id,ll l,ll r){
tr[id].y=r;
if(l==r){
tr[id].u=1;
tr[id].d=1;
return;
}
build(lson,l,mid);
build(rson,mid+1,r);
}
void change(ll id,ll l,ll r,ll x,ll v){//同列修改
if(l==r){
tr[id].l=tr[id].r=tr[id].p=tr[id].q=v;
return;
}
if(x<=mid){
change(lson,l,mid,x,v);
}
else{
change(rson,mid+1,r,x,v);
}
pu(tr[id],tr[lson],tr[rson]);
return;
}
void fix(ll id,ll l,ll r,ll x,ll v,ll vel){//同行修改
if(mid==x){
con[x][v]=vel;
if(l!=r){
pu(tr[id],tr[lson],tr[rson]);
}
return;
}
if(x<=mid){
fix(lson,l,mid,x,v,vel);
}
else{
fix(rson,mid+1,r,x,v,vel);
}
pu(tr[id],tr[lson],tr[rson]);
return;
}
TREE qu(ll id,ll l,ll r,ll ql,ll qr){
if(ql<=l&&r<=qr){
return tr[id];
}
if(ql>mid){
return qu(rson,mid+1,r,ql,qr);
}
if(qr<=mid){
return qu(lson,l,mid,ql,qr);
}
TREE ans;
pu(ans,qu(lson,l,mid,ql,qr),qu(rson,mid+1,r,ql,qr));
return ans;
}
int main(){
c=read();
build(1,1,c);
while(1){
string op;
cin>>op;
if(op=="Exit"){
break;
}
if(op=="Close"){
ll r1=read(),c1=read(),r2=read(),c2=read();
if(r1!=r2){
change(1,1,c,c1,0);
}
else{
fix(1,1,c,min(c1,c2),r1,0);
}
}
if(op=="Open"){
ll r1=read(),c1=read(),r2=read(),c2=read();
if(r1!=r2){
change(1,1,c,c1,1);
}
else{
fix(1,1,c,min(c1,c2),r1,1);
}
}
bool flag=0;
if(op=="Ask"){
ll r1=read(),c1=read(),r2=read(),c2=read();
if(c1>c2){
swap(c1,c2);swap(r1,r2);
}
TREE l=qu(1,1,c,1,c1);
TREE now=qu(1,1,c,c1,c2);
TREE r=qu(1,1,c,c2,c);
if(r1==r2&&r1==1){
if(now.u )flag=1;
if(l.r &&now.d &&r.l )flag=1;
}
if(r1==r2&&r1==2){
if(now.d )flag=1;
if(l.r &&now.u &&r.l )flag=1;
}
if(r1!=r2&&r1==1){
if(now.p )flag=1;
if(l.r &&now.d )flag=1;
if(now.u &&r.l )flag=1;
}
if(r1!=r2&&r1==2){
if(now.q )flag=1;
if(l.r &&now.u )flag=1;
if(r.l &&now.d )flag=1;
}
puts(flag?"Y":"N");
}
}
// cout<<con[1][1]<<endl;
// ll i=3;
// cout<<tr[i].u<<' '<<tr[i].d<<' '<<tr[i].l <<' '<<tr[i].r<<' '<<tr[i].p<<' '<<tr[i].q;
return 0;
}