阅读 18

算法训练营

download:算法训练营

Q:课程是用什么语言教学的?
算法训练营是用 Java 和 Python 教学,不过课程重要的是思路的讲解,不要求必须掌握 Java 和 Python,以往学员中有 C++、PHP、甚至是前端开发工程师,也完全可以学习。
Q:每天需要投入多少时间来学习?
每周需要投入 8-12 小时来观看课程视频,并完成当周作业。

哪些人适合报名算法训练营?

近期有大厂跳槽计划,需快速掌握算法
想进入大数据等热门领域,算法是短板
多次自学算法,但是始终坚持不下去
明白算法知识原理,做题却找不到最优解
无数次下定决心刷题,却不到 3 天就放弃
清楚算法的重要性,但找不到学习方法

//Don't act like a loser.//This code is written by huayucaiji//You can only use the code for studying or finding mistakes//Or,you'll be punished by Sakyamuni!!!#include<bits/stdc++.h>#define int long longusing namespace std;int read() { char ch=getchar(); int f=1,x=0; while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x

10+ch-'0'; ch=getchar(); } return f

x;}const int MAXN=1e5+10;int n,m;int a[MAXN];struct seg_tree { int lazy,num[2][21];}s[MAXN<<2];void pushdown(int l,int r,int p) { if(l==r) { return ; } s[p<<1].lazy^=s[p].lazy; s[p<<1|1].lazy^=s[p].lazy; for(int i=0;i<=20;i++) { if(s[p].lazy&(1<<i)) { swap(s[p<<1].num[0][i],s[p<<1].num[1][i]); swap(s[p<<1|1].num[0][i],s[p<<1|1].num[1][i]); } } s[p].lazy=0;}void build(int l,int r,int p) { if(l==r) { for(int i=0;i<=20;i++) { s[p].num[a[l]&(1<<i)? 1:0][i]++; } s[p].lazy=0; return ; } int mid=(l+r)>>1; build(l,mid,p<<1); build(mid+1,r,p<<1|1); for(int i=0;i<=20;i++) { s[p].num[1][i]=s[p<<1].num[1][i]+s[p<<1|1].num[1][i]; s[p].num[0][i]=s[p<<1].num[0][i]+s[p<<1|1].num[0][i]; }}void modify(int l,int r,int p,int x,int y,int val) { pushdown(l,r,p); if(r<x||y<l) { return ; } if(x<=l&&r<=y) { for(int i=0;i<=20;i++) { if(val&(1<<i)) { swap(s[p].num[0][i],s[p].num[1][i]); } } s[p].lazy=val; return ; } int mid=(l+r)>>1; modify(l,mid,p<<1,x,y,val); modify(mid+1,r,p<<1|1,x,y,val); for(int i=0;i<=20;i++) { s[p].num[1][i]=s[p<<1].num[1][i]+s[p<<1|1].num[1][i]; s[p].num[0][i]=s[p<<1].num[0][i]+s[p<<1|1].num[0][i]; }}int query(int l,int r,int p,int x,int y) { pushdown(l,r,p); if(r<x||y<l) { return 0; } if(x<=l&&r<=y) { int ret=0; for(int i=0;i<=20;i++) { ret+=(1<<i)*s[p].num[1][i]; } return ret; } int mid=(l+r)>>1; return query(l,mid,p<<1,x,y)+query(mid+1,r,p<<1|1,x,y);}signed main() { cin>>n; for(int i=1;i<=n;i++) { a[i]=read(); } build(1,n,1); cin>>m; for(int i=1;i<=m;i++) { int opt=read(); if(opt==2) { int x=read(),y=read(),val=read(); modify(1,n,1,x,y,val); } else { int x=read(),y=read(); printf("%lld\n",query(1,n,1,x,y)); } } return 0;}

文章分类
后端
文章标签