Codeforces Round #149 (Div. 2):XOR on Segment
来源:互联网 发布:淘宝网购付款收货过程 编辑:程序博客网 时间:2024/06/06 20:23
- -20棵线段树
好久没写
#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<vector>#include<string>#include<climits>#include<set>#include<map>#include<queue>#define iinf 2000000000#define sz(x) x.size()#define pb push_back#define mp make_pair#define lng long long#define sqr(a) ((a)*(a))#define pii pair<int,int>#define N 111111#define M 222222#define mod 1000000009#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1template<class T> inline void checkmax(T &x,T y){if(x<y) x=y;}template<class T> inline void checkmin(T &x,T y){if(x>y) x=y;}template<class T> inline T Min(T x,T y){return (x>y?y:x);}template<class T> inline T Max(T x,T y){return (x<y?y:x);}using namespace std;int n,m,op,a,b,x;int sum[N<<2][20];bool clo[N<<2][20];void pushup(int rt){ for(int i=0;i<20;++i) { sum[rt][i]=sum[rt<<1][i]+sum[rt<<1|1][i]; }}void pushdown(int l,int r,int rt){ int mid=(l+r)>>1; for(int i=0;i<20;++i) if(clo[rt][i]){ clo[rt<<1][i]^=1; clo[rt<<1|1][i]^=1; sum[rt<<1][i]=mid-l+1-sum[rt<<1][i]; sum[rt<<1|1][i]=r-mid-sum[rt<<1|1][i]; clo[rt][i]=0; }}void build(int l,int r,int rt){ if(l==r) { scanf("%d",&x); for(int i=0;i<20;++i) if(x&(1<<i)) sum[rt][i]=1; return ; } int mid=(l+r)>>1; build(lson); build(rson); pushup(rt);}lng query(int L,int R,int l,int r,int rt){ if(l>=L&&r<=R) { lng res=0; for(lng i=0;i<20;++i) res+=((lng)1<<i)*(lng)sum[rt][i]; return res; } lng res=0; pushdown(l,r,rt); int mid=(l+r)>>1; if(L<=mid) res+=query(L,R,lson); if(R>mid) res+=query(L,R,rson); return res;}void update(int L,int R,int X,int l,int r,int rt){ if(l>=L&&r<=R) { for(int i=0;i<20;++i) if(X&(1<<i)) { clo[rt][i]^=1; sum[rt][i]=r-l+1-sum[rt][i]; } return ; } int mid=(l+r)>>1; pushdown(l,r,rt); if(L<=mid) update(L,R,X,lson); if(R>mid) update(L,R,X,rson); pushup(rt);}int main(){ while(scanf("%d",&n)==1) { memset(sum,0,sizeof(sum)); memset(clo,0,sizeof(clo)); build(1,n,1); scanf("%d",&m); for(int id=0;id<m;++id) { scanf("%d%d%d",&op,&a,&b); if(op==1) printf("%I64d\n",query(a,b,1,n,1)); else { scanf("%d",&x); update(a,b,x,1,n,1); } } } return 0;}
- Codeforces Round #149 (Div. 2) E. XOR on Segment
- Codeforces Round #149 (Div. 2):XOR on Segment
- Codeforces Round #149 (Div. 2) E - XOR on Segment
- Codeforces Round #149 (Div. 2) E. XOR on Segment(21棵线段树处理每一位+区间异或)
- Codeforces Round #232 (Div. 2) A. On Segment's Own Points
- Codeforces Round #232 (Div. 2) A.On Segment's Own Points(区间统计)
- codeforces 242E XOR on Segment
- Codeforces 242E(XOR on Segment)
- codeforces 242E - XOR on Segment
- Codeforces Round #340 (Div. 2) E XOR and Favorite Number
- Codeforces Round #340 (Div. 2) E. XOR and Favorite Number
- Codeforces Round #340 (Div. 2) E. XOR and Favorite Number
- Codeforces Round #340 (Div. 2) E. XOR and Favorite Number
- Codeforces Round #367 (Div. 2) Vasiliy's Multiset xor trie
- Codeforces Round #367 (Div. 2) 字典树-xor
- Codeforces Round #245 (Div. 2)-C. Xor-tree
- Codeforces Round #245 (Div. 2) C. Xor-tree DFS
- [CF242E]XOR on Segment
- SDUTOJ 1568 俄罗斯方块
- 在android native层使用logcat打印消息
- jQuery中ajax跨域请求
- poj2752 kmp 进一步运用
- Infragistics-UltraGrid-实现多选下拉列表数值
- Codeforces Round #149 (Div. 2):XOR on Segment
- JSF深入--控制跳转(权限控制)
- msn 81000306 无法登录
- CDOJ 1002 解救小Q
- Hoj 1058 Number Triangles
- 学生list集合
- 这几天倒腾的WINDOWS和UBUNTU双系统的感想
- Unix,Linux,Windows的IO架构
- 喜欢sublime的N多理由