【and or分块】51Nod1674[区间的价值 V2]题解
来源:互联网 发布:唯一视觉婚纱摄影 知乎 编辑:程序博客网 时间:2024/06/06 03:22
题目概述
给出一个序列
解题报告
要了解裸题的做法,这道题是and or分块的裸题,对于任意一个点
- 定义
And(i,j)=and(ai,ai+1,⋯,aj) ,对于所有j ,将And(i,j) 去重之后只会剩下log2n 个。 - 定义
Or(i,j)=or(ai,ai+1,⋯,aj) ,对于所有j ,将Or(i,j) 去重之后只会剩下log2n 个。
由于and(单调递减)和or(单调递增)的单调性,上述结论其实很显然。
对于
由于只有
示例程序
#include<cstdio>#include<algorithm>using namespace std;const int maxn=100000,Log=17,MOD=1e9+7;typedef long long LL;int n,a[maxn+5],ans,blk;struct data {int a,b,len;};data b[2*Log+5];inline void AMOD(int &x,int tem) {x+=tem;if (x>=MOD) x-=MOD;}inline void Work(int ID){ b[++blk]=(data){a[ID],a[ID],1}; for (int i=1;i<=blk;i++) b[i].a&=a[ID],b[i].b|=a[ID]; int now=blk;blk=1; for (int i=2;i<=now;i++) if (b[i].a==b[blk].a&&b[i].b==b[blk].b) b[blk].len+=b[i].len; else b[++blk]=b[i]; for (int i=1;i<=blk;i++) AMOD(ans,(LL)b[i].a*b[i].b%MOD*b[i].len%MOD);}int main(){ freopen("program.in","r",stdin); freopen("program.out","w",stdout); scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]); for (int i=n;i>=1;i--) Work(i); return printf("%d\n",ans),0;}
阅读全文
0 0
- 【and or分块】51Nod1674[区间的价值 V2]题解
- 51Nod1674[区间的价值 V2]--分块
- 区间的价值 V2
- 51NOD AGT19A 区间的价值 V2
- 51NOD 1674 区间的价值 V2
- 51NOD-1674 区间的价值 V2
- 51nod 区间的价值 V2
- 51Nod-1674-区间的价值 V2
- 51nod 1674 区间的价值 V2
- 51nod 1674 区间的价值 V2
- 【51nod 算法马拉松19 A】区间的价值 V2
- 51nod 1564 && 1674 区间的价值(V2) 数列分治
- 51Nod 1674——区间的价值 V2
- 【51nod】1674 区间的价值 V2 状态压缩
- 【数学结论】51Nod 1674 区间的价值 V2
- 51nod 1674 区间的价值 V2(暴力)
- 51nod 1674 区间的价值 V2(分治)
- 【51NOD 1674】【51NOD 算法马拉松19】区间的价值 V2
- c++编程题2
- selenium之开发登录脚本_maven版本一
- hdu--4884--TIANKENG’s rice shop【模拟】
- HDU 2428
- 彻底解决QT编码问题
- 【and or分块】51Nod1674[区间的价值 V2]题解
- 由JDBC事务引起的锁状态以及内存数据无法写入数据库的问题
- Unknown feature (Run Configuration[AndroidRunConfigurationType]) covered by disabled plugin detecte
- 第二周神经网络基础
- 很好
- SDUT 2122 数据结构实验之链表七:单链表中重复元素的删除
- 实习结束
- 第二周编程作业 -Logistic Regression with a Neural Network mindset
- 第三周浅层神经网络