Codeforces 876F High Cry【逆向思维】
来源:互联网 发布:南开大学网络教学平台 编辑:程序博客网 时间:2024/05/22 04:51
参考:http://blog.csdn.net/mengxiang000000/article/details/78261348
题目大意:让我们计算有多少个区间【L,R】,使得其或的和严格大于区间内所有的数。
#include <bits/stdc++.h>using namespace std;#define N 200050#define LL long long #define up 32LL n;map<int,int>last;int a[N];int L[N],R[N],pos[N];int main(){ scanf("%lld",&n); for(int i=1;i<=n;++i)scanf("%d",&a[i]); for(int i=1;i<=n;++i){ L[i]=last[a[i]]; for(int j=0;j<up;++j){ if(!(a[i]&(1<<j)))L[i]=max(L[i],pos[j]); } for(int j=0;j<up;++j){ if((a[i]&(1<<j)))pos[j]=i; } last[a[i]]=i; } for(int j=0;j<up;++j)pos[j]=n+1; for(int i=n;i>=1;--i){ R[i]=n+1; for(int j=0;j<up;++j) if(!(a[i]&(1<<j)))R[i]=min(R[i],pos[j]); for(int j=0;j<up;++j) if(a[i]&(1<<j))pos[j]=i; } LL sum=(1LL*n*(n+1))/2; for(int i=1;i<=n;++i){ LL t1=i-L[i]; LL t2=R[i]-i; sum-=t1*t2; } printf("%lld\n",sum);}
阅读全文
0 0
- Codeforces 876F High Cry【逆向思维】
- Codeforces 876F High Cry【逆向思维】
- codeforces 876F High Cry (思维,位运算)
- [杂题 位运算] Codeforces #876F. High Cry
- Codeforces #441 Div2 F. High Cry
- Codeforces Round #441 (Div. 2)F. High Cry 按位考虑 + 思维
- Codeforces 875D High Cry
- Codeforces Round #441 (Div. 2)F. High Cry |区间问题
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) F. High Cry
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) F. High Cry
- Codeforces 875D High Cry rmq+分治
- Codeforces 875D High Cry [枚举+二进制]
- Codeforces 875D High Cry st表+分治
- Codeforces 611F 思维
- codeforces 217E 逆向思维
- codeforces 250/C 逆向思维
- Codeforces 828 D. High Load 思维+构造
- Codeforces Round #441 (Div. 1, by Moscow Team Olympiad) D. High Cry
- 【nginx】Nginx的安装和配置
- Google Guava学习(10)-Guava字符串工具CharMatcher
- 【Java并发学习】之线程的创建
- 在word开发中,跨文件数据拷贝粘贴出现ComException(“组织策略阻止了该操作“)异常的处理方式
- python内置数据类型:数字
- Codeforces 876F High Cry【逆向思维】
- python使用的零散知识
- vim编辑器(4):环境设置
- python 表示windows路径
- 项目管理的繁杂
- Ubuntu与windows时间不对的问题的解决方案
- 【nginx】相关配置
- dex2oat源码流程分析
- 北京四合院信息