Sonya and Bitwise OR CodeForces - 1004F (线段树,分治)
大意: 给定序列$a$, 给定整数$x$. 两种操作(1)单点修改 (2)给定区间$[l,r]$,求有多少子区间满足位或和不少于$x$.
假设不带修改. 固定右端点, 合法区间关于左端点单调的. 可以预处理出最近的合法的左端点位置.那么每次询问答案就为$\sum\limits_{\substack{pre[i]\ge l\\ l \le i\le r}}(pre[i]-l+1)$. 用二维数点的方法处理即可.
带修改的话, 关键是要注意到或和最多改变$20$次, 线段树记录下来改变的位置, 暴力合并即可.
#include <iostream>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#include <bitset>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl '\n'
#define DB(a) ({REP(__i,1,n) cout<<a[__i]<<' ';hr;})
using namespace std;
typedef long long ll;
typedef pair<int,int> pii; const int N = 1e5+10;
int n,m,X,a[N];
struct _ {
int lnum,rnum,x,L,R;
ll ans;
pii l[22],r[22];
_ () {}
_ (int lnum,int rnum,int x,int L,int R,ll ans):lnum(lnum),rnum(rnum),x(x),L(L),R(R),ans(ans) {}
_ (int pos, int val) {
L=R=l[1].y=r[1].y=pos;
l[1].x=r[1].x=x=val;
ans=(val<X);
lnum=rnum=1;
}
_ operator + (const _& rhs) const {
_ ret(lnum,rhs.rnum,x|rhs.x,L,rhs.R,ans+rhs.ans);
memcpy(ret.l,l,sizeof l);
memcpy(ret.r,rhs.r,sizeof r);
for (int i=rnum,j=0; i; --i) {
while (j<rhs.lnum&&(r[i].x|rhs.l[j+1].x)<X) ++j;
ret.ans += (ll)(r[i].y-(i<rnum?r[i+1].y:L-1))*((j<rhs.lnum?rhs.l[j+1].y:rhs.R+1)-rhs.L);
}
REP(i,1,rhs.lnum) if ((rhs.l[i].x|x)!=ret.l[ret.lnum].x) {
(ret.l[++ret.lnum]=rhs.l[i]).x |= x;
}
REP(i,1,rnum) if ((r[i].x|rhs.x)!=ret.r[ret.rnum].x) {
(ret.r[++ret.rnum]=r[i]).x |= rhs.x;
}
return ret;
}
} tr[N<<2];
void build(int o, int l, int r) {
if (l==r) tr[o]=_(l,a[l]);
else build(ls),build(rs),tr[o]=tr[lc]+tr[rc];
}
void update(int o, int l, int r, int x, int v) {
if (l==r) tr[o]=_(x,v);
else {
mid>=x?update(ls,x,v):update(rs,x,v);
tr[o]=tr[lc]+tr[rc];
}
}
_ query(int o, int l, int r, int ql, int qr) {
if (ql<=l&&r<=qr) return tr[o];
if (mid>=qr) return query(ls,ql,qr);
if (mid<ql) return query(rs,ql,qr);
return query(ls,ql,qr)+query(rs,ql,qr);
}
int main() {
scanf("%d%d%d", &n, &m, &X);
REP(i,1,n) scanf("%d", a+i);
build(1,1,n);
while (m--) {
int op,x,y;
scanf("%d%d%d", &op, &x, &y);
if (op==1) update(1,1,n,x,y);
else printf("%lld\n",(y-x+1ll)*(y-x+2)/2-query(1,1,n,x,y).ans);
}
}
Sonya and Bitwise OR CodeForces - 1004F (线段树,分治)的更多相关文章
- Codeforces 938G 线段树分治 线性基 可撤销并查集
		
Codeforces 938G Shortest Path Queries 一张连通图,三种操作 1.给x和y之间加上边权为d的边,保证不会产生重边 2.删除x和y之间的边,保证此边之前存在 3.询问 ...
 - Codeforces 1140F 线段树 分治 并查集
		
题意及思路:https://blog.csdn.net/u013534123/article/details/89010251 之前cf有一个和这个相似的题,不过那个题只有合并操作,没有删除操作,直接 ...
 - Sereja and Brackets CodeForces - 380C  (线段树+分治思路)
		
Sereja and Brackets 题目链接: CodeForces - 380C Sereja has a bracket sequence s1, s2, ..., *s**n, or, in ...
 - Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论
		
Bash and a Tough Math Puzzle CodeForces 914D 线段树+gcd数论 题意 给你一段数,然后小明去猜某一区间内的gcd,这里不一定是准确值,如果在这个区间内改变 ...
 - loj#2312. 「HAOI2017」八纵八横(线性基 线段树分治)
		
题意 题目链接 Sol 线性基+线段树分治板子题.. 调起来有点自闭.. #include<bits/stdc++.h> #define fi first #define se secon ...
 - BZOJ.4184.shallot(线段树分治 线性基)
		
BZOJ 裸的线段树分治+线性基,就是跑的巨慢_(:з」∠)_ . 不知道他们都写的什么=-= //41652kb 11920ms #include <map> #include < ...
 - BZOJ.4137.[FJOI2015]火星商店问题(线段树分治 可持久化Trie)
		
BZOJ 洛谷 一直觉得自己非常zz呢.现在看来是真的=-= 注意题意描述有点问题,可以看BZOJ/洛谷讨论. 每个询问有两个限制区间,一是时间限制\([t-d+1,t]\),二是物品限制\([L,R ...
 - 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)
		
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...
 - bzoj4025二分图(线段树分治 并查集)
		
/* 思维难度几乎没有, 就是线段树分治check二分图 判断是否为二分图可以通过维护lct看看是否链接出奇环 然后发现不用lct, 并查集维护奇偶性即可 但是复杂度明明一样哈 */ #include ...
 
随机推荐
- 构建Hadoop监控共同体
			
HDFS监控背后那些事儿,构建Hadoop监控共同体 原创: 应用研发部 京东云 2018-12-19 https://mp.weixin.qq.com/s/kulwDgwu-rYf4SvQ1dOwc ...
 - 90后外挂开发者:已经有许多主播在我这里在外挂,我月入50W
			
绝地求生上线不到一年已经火爆全球,玩家们表示再差的优化也抵挡不住我们玩游戏的热情,近日,各大平台主播糯米油条五五开等人的开挂实锤闹得沸沸扬扬,玩家之间刮起了一阵反击外挂的风暴. 俗话说得好,没有买卖就 ...
 - 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_10-课程详情页面静态化-课程详情模型数据查询接口
			
根据课程详情页面写一个获取数据模型的接口 目录的数据来自于课程计划表 右侧是课程的图片 需要写一个接口 获取课程相关的所有信息. 所以就需要一个模型类,里面包含了基本信息.图片信息.等各种详情页面的信 ...
 - robot用例执行常用命令(还没试)
			
执行命令 执行一个用例 robot -t “testcase_name“ data_test.robot 按用例文件执行 robot data_test.robot或者robot --suite “p ...
 - 123457123456---熊猫猜谜语02(儿童猜谜语大全)--com.threeObj03.CaiMiYu02
			
熊猫猜谜语02(儿童猜谜语大全)--com.threeObj03.CaiMiYu02
 - SpringCloud学习成长 四   断路器(Hystrix)
			
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用.为了保证其高可用,单个服务 ...
 - (一)深入java虚拟机之内存溢出与分析
			
一.内存溢出程序 public class Test { public static void main(String[] args) { List<User> userList=new ...
 - C# http请求 设置代理(标题可以作为搜索关键字)
			
例一(C# 通过代理发HTTP请求): https://q.cnblogs.com/q/88682/ 例二(C# 代理HTTP请求): https://www.cnblogs.com/ShalenCh ...
 - 【Leetcode_easy】705. Design HashSet
			
problem 705. Design HashSet 题意: solution1: class MyHashSet { public: /** Initialize your data struct ...
 - ELK之elasticsearch7版本集群设置
			
ELK7版本搭建参考:https://www.cnblogs.com/minseo/p/10948632.html node-1已经安装配置好 配置文件如下 [root@salt-test conf. ...