這題很裸,只要維護單點1,0就行了、、
不同運算表示 :
u : 全1
d : 全0
i : 以外全0
c : 取反,以外取0
s :取反
線段樹標記記得下傳時當前點標記清零 ,然後就沒了
犯的錯誤: 1、 標記忘清零、
2、 小數時的括號
3、特判!!!0!!! 0!!!!0 !!!!
碼:
#include#includeusing namespace std;
#define zuo l,mid,o<<1
#define you mid+1,r,o<<1|1
#define n 131075
int quan1[n<<2],quan0[n<<2],rev[n<<2],a,b,op,la,lb,i,lin;
char ch,zkh,ykh,douhao;
bool yes,lianxu,jieshu,yici=1;
void down(int o)
if(quan1[o]==1)
if(rev[o]==1)
rev[o]=0;
quan0[o]=0;
quan1[o]=0;
}void gai(int l,int r,int o)
if(op==2)
if(op==3)
if(l!=r)down(o);
return;
}int mid=(l+r)>>1;
if(a<=mid)gai(zuo);
if(b>=mid+1)gai(you);
}void zhao(int l,int r,int o)
int mid=(l+r)>>1;
if(a<=mid)zhao(zuo);
if(a>=mid+1)zhao(you);
}int main()
if(jieshu)break;
scanf("%c",&zkh);scanf("%c",&zkh);
scanf("%d",&a);
scanf("%c",&douhao);
scanf("%d",&b);
scanf("%c",&ykh);
a*=2;
b*=2;
if(zkh=='(')a++;
if(ykh==')')b--;
if(ch=='u')
if(ch=='i')
if(ch=='d')
if(ch=='c')
if(ch=='s')
}for(i=0;i<=131071;i++)
if(lianxu==0)
}else if(!yici)printf(" [%d,",a/2);
else
} }else
if(lianxu==1)
else printf("%d)",a/2);}}
}if(yes==0)
}
校門外的樹 區間包含
某校大門外長度為l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸0的位置,另一端在l的位置 數軸上的每個整數點,即0,1,2,l,都種有一棵樹。由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止...
SDOI2008校門外的區間
這道題作為前天的模擬賽題,考場上我在還剩乙個半小時的情況下居然選擇求穩打暴力,水過了40分,然後就坐看cansult和refun這倆dalaoak.一開始我的想法是,把區間看成兩點之間不包含端點的小區間和端點構成的集合,然後分開處理,這個做法可能暴力還是可以的,然而如果要用線段樹的話,就要開兩顆線段...
校門外的樹
描述 某校大門外長度為 l的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是 1公尺。我們可以把馬路看成乙個數軸,馬路的一端在數軸 0的位置,另一端在 l的位置 數軸上的每個整數點,即0,1,2 l,都種有一棵樹。馬路上有一些區域要用來建地鐵,這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起...