Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
发个code#include <cstdio> #include <bitset> #include <iostream> using namespace std; template<typename T> inline T read() { T x=0,f=1;char c=getchar(); while (c<'0' || c>'9'){if (c=='-')f=-1;c=getchar();} while (c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-48;c=getchar();} return x*f; } const int MAXN=100005; int n,m,t,ans; namespace stree { int color[MAXN<<2]; bitset<MAXN<<2> coverd; inline void push_up(int k) { color[k]=color[k<<1]|color[k<<1|1]; } inline void push_down(int k) { color[k<<1]=color[k];color[k<<1|1]=color[k]; coverd.reset(k);coverd.set(k<<1);coverd.set(k<<1|1); } inline void edit_tree(int k,int l,int r,int _l,int _r,int d) { if (color[k]==d) return ; if (_l<=l&&_r>=r) {color[k]=d;coverd.set(k);return ;} if (coverd[k]) push_down(k); int mid=l+r>>1; if (_l<=mid) edit_tree(k<<1,l,mid,_l,_r,d); if (_r>mid) edit_tree(k<<1|1,mid+1,r,_l,_r,d); push_up(k); } inline void query(int k,int l,int r,int _l,int _r) { if (_l<=l&&_r>=r) {ans|=color[k];return ;} if (coverd[k]) {ans|=color[k];return ;} int mid=l+r>>1; if (_l<=mid) query(k<<1,l,mid,_l,_r); if (_r>mid) query(k<<1|1,mid+1,r,_l,_r); } } inline int count(int &x) { int w=0; for (;x;x-=(x&-x)) w++; return w; } int main() { char op; int a,b,c; while (~scanf("%d%d%d",&n,&t,&m)) { stree::edit_tree(1,1,n,1,n,1); while (m--) { cin>>op; if (op=='C') { a=read<int>();b=read<int>();c=read<int>(); stree::edit_tree(1,1,n,a,b,1<<c-1); } else { a=read<int>();b=read<int>(); stree::query(1,1,n,a,b); printf("%d\n",count(ans)); } } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator