当前位置: 首页 > news >正文

如何查看网站跳出率国际新闻界期刊

如何查看网站跳出率,国际新闻界期刊,虚拟机怎么做多个网站,阿里云建网站费用1.XOR的艺术 题意 给定一个长度为 n n n的、只含有数字 0 , 1 0,1 0,1的字符串和两种操作。 对于每种操作,给定 o p , l , r op,l,r op,l,r: o p 0 op0 op0表示将字符串的 [ l , r ] [l, r] [l,r]区间内的 0 0 0变成 1 1 1, 1 1 1变成 0 …

1.XOR的艺术

题意

给定一个长度为 n n n的、只含有数字 0 , 1 0,1 0,1的字符串和两种操作。

对于每种操作,给定 o p , l , r op,l,r op,l,r

o p = 0 op=0 op=0表示将字符串的 [ l , r ] [l, r] [l,r]区间内的 0 0 0变成 1 1 1 1 1 1变成 0 0 0

o p = 1 op=1 op=1表示询问字符串的 [ l , r ] [l, r] [l,r]区间内有多少个字符 1 1 1

思路

一段区间中非 0 0 0 1 1 1,那么该区间中 1 1 1的个数,其实就是区间求和,考虑使用线段树解决这个问题。

对于 o p = 0 op=0 op=0这个取反操作,设区间左右端点分别为 l , r l,r l,r,原来的 1 1 1个数为 s u m sum sum;取反一次,原来 1 1 1的位置有 s u m sum sum处变成 0 0 0,而原来为 0 0 0的位置有 ( r − l + 1 ) − s u m (r-l+1)-sum (rl+1)sum处变成 1 1 1,相当于现在 1 1 1的个数 s u m ′ = ( r − l + 1 ) − s u m sum'=(r-l+1)-sum sum=(rl+1)sum

知道了怎么更新区间了就好办了,但是为了节省时间就要引入懒标记 t a g tag tag

可以令其表示区间要被处理的次数,在下次修改或查询时当次数为奇数时才 p u s h d o w n pushdown pushdown下放(因为翻转两次就相当于没反转)

也可以直接让 t a g = 0 tag=0 tag=0 1 1 1,来表示需不需要执行翻转操作,每次更新就异或一次 1 1 1

线段树就只需要维护区间和 s u m sum sum即可。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls u<<1
#define rs u<<1|1
const ll N=2e5+9;
ll n,m,a[N];
char c[N];
struct SegT
{struct node{ll sum,tag;}T[N<<4];void pushup(ll u){T[u].sum=T[ls].sum+T[rs].sum;}void pushdown(ll u,ll l,ll r){if(T[u].tag){ll mid=(l+r)>>1;T[ls].sum=(mid-l+1)-T[ls].sum;T[rs].sum=(r-mid)-T[rs].sum;}T[ls].tag^=T[u].tag;T[rs].tag^=T[u].tag;T[u].tag=0;}void build(ll u,ll l,ll r){if(l==r){T[u].sum=a[l];return;}ll mid=(l+r)>>1;build(ls,l,mid);build(rs,mid+1,r);pushup(u);}void modify(ll u,ll l,ll r,ll ql,ll qr){if(qr<l||r<ql)return;if(ql<=l&&r<=qr){T[u].sum=(r-l+1)-T[u].sum;T[u].tag^=1;return;}pushdown(u,l,r);ll mid=(l+r)>>1;if(ql<=mid)modify(ls,l,mid,ql,qr);if(qr>mid)modify(rs,mid+1,r,ql,qr);pushup(u);}ll query(ll u,ll l,ll r,ll ql,ll qr){if(qr<l||r<ql)return 0;if(ql<=l&&r<=qr)return T[u].sum;pushdown(u,l,r);ll mid=(l+r)>>1,ret=0;if(ql<=mid)ret+=query(ls,l,mid,ql,qr);if(qr>mid)ret+=query(rs,mid+1,r,ql,qr);return ret;}
}A;
int main()
{scanf("%lld%lld%s",&n,&m,c+1);for(int i=1;i<=n;i++)a[i]=c[i]-'0';A.build(1,1,n);while(m--){ll op,l,r;scanf("%lld%lld%lld",&op,&l,&r);if(op==0)A.modify(1,1,n,l,r);if(op==1)printf("%lld\n",A.query(1,1,n,l,r));}return 0;
}

2.XOR on Segment

题意

给定 n n n个数的序列 a a a m m m次操作,操作有两种:

对于每种操作,给定 o p , l , r op,l,r op,l,r

o p = 1 op=1 op=1表示要求区间 [ l , r ] [l,r] [l,r]内所有数的和

o p = 2 op=2 op=2时,给定 x x x,并将区间 [ l , r ] [l,r] [l,r]所有数异或上 x x x

1 ≤ n ≤ 1 0 5 , 1 ≤ m ≤ 5 × 1 0 4 , 1 ≤ x , a i ≤ 1 0 6 1\le n\le 10^5,\ 1\le m\le 5\times10^4,\ 1\le x,a_i\le 10^6 1n105, 1m5×104, 1x,ai106

思路

对比上一题,本题将 0 0 0 1 1 1的序列推广到 [ 1 , 1 0 6 ] [1,10^6] [1,106],大了不少。

但能否和上一题产生关联呢?

当然是可以的!可以考虑用 0 , 1 0,1 0,1表示序列中每个数的二进制,因为 1 ≤ a i ≤ 1 0 6 1\le a_i\le 10^6 1ai106,所以二进制最多有 ⌈ log ⁡ 2 1 0 6 ⌉ = 20 \left \lceil \log_2{10^6} \right \rceil =20 log2106=20位。可以开 20 20 20棵线段树来维护 20 20 20个进制位,做法和上一题大差不差了。

修改的时候如果 x x x与当前第 i i i位的“基底” 2 i 2^i 2i作且操作,即 x a n d 2 i = 0 x\ and\ 2^i =0 x and 2i=0时,那就无需对这一位更新,因为异或 0 0 0相当于不用异或。

最后预处理 2 2 2的幂,然后逐位相加就能得到查询的答案。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls u<<1
#define rs u<<1|1
const int N=1e5+9,M=20;
int n,m,a[N];
int _2[M];
void init()
{_2[0]=1;for(int i=1;i<M;i++)_2[i]=_2[i-1]*2;
}
struct SegT
{struct node{ll sum;int tag;}T[N<<2];void pushup(int u){T[u].sum=T[ls].sum+T[rs].sum;}void pushdown(int u,int l,int r){if(T[u].tag){int mid=(l+r)>>1;T[ls].sum=(mid-l+1)-T[ls].sum;T[rs].sum=(r-mid)-T[rs].sum;T[ls].tag^=T[u].tag;T[rs].tag^=T[u].tag;T[u].tag=0;}}void build(int u,int l,int r,int ws){if(l==r){T[u].sum=(ll)(a[l]&_2[ws]?1:0);return;}int mid=(l+r)>>1;build(ls,l,mid,ws);build(rs,mid+1,r,ws);pushup(u);}void modify(int u,int l,int r,int ql,int qr){if(qr<l||r<ql)return;if(ql<=l&&r<=qr){T[u].sum=(ll)(r-l+1)-T[u].sum;T[u].tag^=1;return;}pushdown(u,l,r);int mid=(l+r)>>1;if(ql<=mid)modify(ls,l,mid,ql,qr);if(qr>mid)modify(rs,mid+1,r,ql,qr);pushup(u);}ll query(int u,int l,int r,int ql,int qr){if(qr<l||r<ql)return 0;if(ql<=l&&r<=qr)return T[u].sum;pushdown(u,l,r);int mid=(l+r)>>1;ll ret=0;if(ql<=mid)ret+=(ll)query(ls,l,mid,ql,qr);if(qr>mid)ret+=(ll)query(rs,mid+1,r,ql,qr);return ret;}
}A[M];
int main()
{init();scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=0;i<M;i++)A[i].build(1,1,n,i);scanf("%d",&m);while(m--){int op,l,r;scanf("%d%d%d",&op,&l,&r);if(op==1){ll ans=0;for(int i=0;i<M;i++)ans+=1ll*_2[i]*A[i].query(1,1,n,l,r);printf("%lld\n",ans);}else {int x;scanf("%d",&x);for(int i=0;i<M;i++)if(x&_2[i])A[i].modify(1,1,n,l,r);}}return 0;
}
http://www.hkea.cn/news/408977/

相关文章:

  • 阜蒙县建设学校网站是什么北京seo编辑
  • 珠海建设局网站十大经典事件营销案例分析
  • 创建网站开发公司互联网推广引流是做什么的
  • 万盛集团网站建设seo网站推广全程实例
  • 做教育的网站需要资质吗网站怎么开发
  • 微网站怎么做滚动中国万网域名注册官网
  • 个人如何免费建网站seo在线优化工具 si
  • 双线主机可以做彩票网站吗网络推广合作协议
  • 做外贸的b2b网站域名批量查询系统
  • 建设网站需要哪些职位网站建设策划书
  • 苏州网站建设哪里好网站点击排名优化
  • 网站建设收费标准策划百度推广关键词越多越好吗
  • 网站怎么做更新吗如何建立网页
  • 国外建设工程招聘信息网站tool站长工具
  • 专业做相册书的网站电商网站建设制作
  • 银川网站开发公司电话东莞网
  • 环境保护局网站管理制度建设百度指数的主要功能有
  • 安装wordpress提示500错误关键词优化的策略有哪些
  • 企业网站建设公司排名深圳高端seo公司助力企业
  • 做网站套餐网站seo
  • 网站上的代码网页怎么做的下载百度软件
  • 网站功能模块建设搜狗推广
  • 网站做推广有用吗网站页面设计
  • 做简报的网站广州搜发网络科技有限公司
  • 南乐县住房和城乡建设局网站制作网站的步骤是什么
  • 金华做网站最专业的公司搜易网提供的技术服务
  • wordpress适合门户网站吗怎么营销自己的产品
  • 常用的网站类型有哪些seo优化专员编辑
  • 网站专题框架怎么做海阳seo排名
  • 手机网站代码下载黄页网站推广服务