poj2777
Posted lxzl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj2777相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h> using namespace std; #define ll long long ll sum[500000]; ll n,p,ans; ll ql,qr,v; void mk(ll o,ll l,ll r){ if(ql<=l&&qr>=r)sum[o]=1<<(v-1); else{ ll m=l+(r-l)/2; if(m>=ql)mk(o*2,l,m); if(m<qr)mk(o*2+1,m+1,r); sum[o]=sum[o*2]|sum[o*2+1]; } } void qz(ll o,ll l,ll r){ if(l>=ql&&qr>=r)ans=ans|sum[o]; else { ll m=(r-l)/2; if(ql<=m)qz(o*2,l,m); if(qr>m)qz(o*2+1,m+1,r); } } int main(){ cin>>n>>p>>p; for(int i=1;i<=p;i++){ char c; cin>>c; if(c==‘P‘){ cin>>ql>>qr; qz(1,1,n) } } return 0; }
[l,r]的颜色个数用30位二进制数表示。
线段树支持区间修改。
sum[o]=sum[o*2] or sum[o*2+1]
以上是关于poj2777的主要内容,如果未能解决你的问题,请参考以下文章