[二分 ST表 杂题] Codeforces875D. High Cry
来源:互联网 发布:windows信息发布系统 编辑:程序博客网 时间:2024/06/06 10:58
早知道先看D题就不会掉这么惨了
枚举左端点,那么区间或值最多变化log次
二分变化的区间,再二分区间或值大于区间最大值的区间
用ST表记一下区间最大值、或值
#include <cstdio> #include <algorithm>#include <iostream>using namespace std;typedef long long ll;const int N=200010;int n,a[N],lg2[N];int ior[N][20],imax[N][20];inline void Pre(){ for(int i=1;i<=n;i++) lg2[i]=lg2[i-1]+((1<<lg2[i-1]+1)==i); int t=lg2[n]; for(int i=1;i<=n;i++) ior[i][0]=imax[i][0]=a[i]; for(int k=1;k<=t;k++) for(int i=1;i+(1<<k)-1<=n;i++) ior[i][k]=ior[i][k-1]|ior[i+(1<<k-1)][k-1],imax[i][k]=max(imax[i][k-1],imax[i+(1<<k-1)][k-1]);}inline int Qor(int l,int r){ int t=lg2[r-l+1]; return ior[l][t]|ior[r+1-(1<<t)][t];}inline int Qmax(int l,int r){ int t=lg2[r-l+1]; return max(imax[l][t],imax[r-(1<<t)+1][t]);}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); Pre(); ll ans=0; for(int i=1;i<=n;i++){ int cur=a[i],j=i; while(j<=n){ int l=j,r=n,mid,nxt; while(l<=r) Qor(i,mid=l+r>>1)==cur?l=(nxt=mid)+1:r=mid-1; l=j; r=nxt; int pos=-1; while(l<=r) Qmax(i,mid=l+r>>1)<cur?l=(pos=mid)+1:r=mid-1; if(~pos) ans+=pos-j+1; j=nxt+1; cur=Qor(i,j); } } cout<<ans<<endl; return 0;}
阅读全文
0 0
- [二分 ST表 杂题] Codeforces875D. High Cry
- [ ST表 ] Codeforces875D High Cry
- Codeforces 875D High Cry st表+分治
- [杂题 位运算] Codeforces #876F. High Cry
- Codeforces 875D High Cry
- Codeforces #441 Div2 F. High Cry
- Codeforces 876F High Cry【逆向思维】
- Codeforces 875D High Cry rmq+分治
- Codeforces 876F High Cry【逆向思维】
- Codeforces 875D High Cry [枚举+二进制]
- HDU 5875 二分+st表
- hdu5726 GCD st表 + 二分
- codeforces 475D CGCDSSQ ST表+二分
- hdu 5726 GCD (二分+ST表)★
- HDOJ 5726 GCD 二分+ST表
- codeforces689D Friends and Subsequences 二分+ST表
- hud 5726 GCD st表+二分
- codeforces 689D ST表+二分 模板
- mongodb根据id获取时间____js
- Wi-Fi 爆重大安全漏洞,Android、iOS、Windows 等所有无线设备都不安全了
- 安卓端double取小数点后2位4种方法(都有bug)
- 查找操作------折半查找(二分查找)
- 前端基础HTML 笔记
- [二分 ST表 杂题] Codeforces875D. High Cry
- 快学Spark 2.0(新特性、含真实项目、纯Scala语言开发、CDH5.7) 分享下载地址——https://pan.baidu.com/s/1jHVvIAi 密码: sirk 本课程从基础开
- 面试总结——高级JAVA工程师(三)
- 用scala程序实现saveAsLibSVMFile的文件输出
- 智能算法综述
- Android中将资源文件转为Bitmap对象
- 监控程序Supervisord介绍+Supervisord配置管理子进程
- linux下Android7.0多用户编译问题
- 修改linux时间格式及时区