牛客练习赛16 B求值

题目描述

给定n个数字a1, a2, ..., an。
定义f(l, r) = al | al+1| ... | ar。
现在枚举(1 <= l <= r <= n),问不同的f值一共有多少个。

输入描述:

第一行一个整数n表示数组大小 (1 <= n <= 100,000);第二行n个整数满足0 <= ai <= 1000,000。

输出描述:

输出一个整数表示不同的f值一共有多少个。

示例1

输入

3
1 2 0

输出

4

示例2

输入

10
1 2 3 4 5 6 1 2 9 10

输出

11

每输入一个数字,计算它与前面的数字进行或运算能产生多少值。滚动求值,求当前输入的值是建立在前面的基础上的。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 2e6+10;
 4 set<int> st[2];
 5 bool vis[N];
 6 int x, n, last, ans;
 7 int main() {
 8     cin >> n;
 9     for(int i = 1; i <= n; i ++) {
10         cin >> x;
11         last = 1 - last;
12         st[last].clear();
13         set<int> :: iterator it = st[1-last].begin();
14         for(; it != st[1-last].end(); ++ it) {
15             int y = (*it)|x;
16             vis[y] = true;
17             st[last].insert(y);
18         }
19         st[last].insert(x);
20         vis[x] = true;
21     }
22     for(int i = 0; i < N; i ++) if(vis[i]) ans++;
23     cout << ans << endl;
24     return 0;
25 }

原文地址:https://www.cnblogs.com/xingkongyihao/p/8966843.html

时间: 2024-08-30 16:19:37

牛客练习赛16 B求值的相关文章

牛客练习赛16

A   字典序最大的子序列 > 25960019 一开始潜意识看成了循环,最长子串-- 找每个字母最晚出现的位置,那么比它小的字符必须出现在 在它之后的位置 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <cmath> 5 #include <set> 6 #include <map> 7 #include <list>

牛客练习赛 16

在各位ak的大佬中,我感觉我寄几好菜啊... 题目描述 给定字符串s,s只包含小写字母,请求出字典序最大的子序列. 子序列:https://en.wikipedia.org/wiki/Subsequence 字典序:https://en.wikipedia.org/wiki/Lexicographical_order 输入描述: 一行一个字符串s (1 <= |s| <= 100,000). 输出描述: 字典序最大的子序列. 示例1 输入 ababba 输出 bbba 示例2 输入 abbcb

【牛客】牛客练习赛16(未完)

A  字典序最大的子序列 题意:给定字符串s,s只包含小写字母,请求出字典序最大的子序列.(看例子就能看明白) 思路:从这个字符串a后面开始比较,先把最后一个字母存进s,然后那那s中最新的一个元素跟a中上一个进行比较,如果a不比s小,则存入s,并把这个看做新哒~ #include<bits/stdc++.h> using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f; char s[100007]; int ma

牛客练习赛11 B trie树+拓扑判环 E 分治求平面最近点对

牛客练习赛11 B  假的字符串题意:给定n个字符串,互不相等,你可以任意指定字符之间的大小关系(即重定义字典序),求有多少个串可能成为字典序最小的串,并输出它们. tags:好题 对于一个字符串, 1]如有其它字符串是它的前缀,那肯定不可能.这个直接用字典树处理就可以. 2]但如果以这个字符串为最小,怎么判定其它字符串不会矛盾呢? 其实矛盾的情况详细一点说是: 比如要以  abcd 为最小, 但又有另一个字符串 aba ,这就矛盾了. 对这种情况,在跑字典树的时候,我们对有相同父亲结点的多个儿

牛客练习赛18

链接:https://www.nowcoder.com/acm/contest/110/A来源:牛客网 最大乘积 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 这题要你回答T个询问,给你一个正整数S,若有若干个正整数的和为S,则这若干的数的乘积最大是多少?请输出答案除以2000000000000000003(共有17 个零) 的余数. 举例来说,当 S = 5 时,若干个数的和为 5

转载:牛客练习赛17 c 规律题

转载:https://www.cnblogs.com/zzqc/p/8995135.html C.链接:https://www.nowcoder.com/acm/contest/109/C来源:牛客网 题目描述 给定长度为n的数组a,定义一次操作为:1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod 1,000,000,007:2. 执行a = s:现在问k次操作以后a长什么样. 输入描述: 第一行两个整数n,k(1 <= n <= 2000,

牛客练习赛1 补题记录

A 矩阵 中文题意,要找一个最大的k阶子矩阵在原矩阵中出现过两次. 需要将这个矩阵进行Hash,也就是需要二维Hash,先把每一行Hash了,再把每一列Hash了,有一点前缀的感觉. 预处理完Hash值之后,二分答案k,check过程是在$O(n ^ 2)$枚举起点,这里其实枚举终点方便一些,边界比较好处理,把每个k阶矩阵的hash值存下来,最后看有没有两个一样的. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int

牛客练习赛13

幸运数字 I 定义一个数字为幸运数字当且仅当它的所有数位都是4或者7. 比如说,47.744.4都是幸运数字而5.17.467都不是. 现在,给定一个字符串s,请求出一个字符串,使得: 1.它所代表的整数是一个幸运数字: 2.它非空: 3.它作为s的子串(不是子序列)出现了最多的次数(不能为0次). 请求出这个串(如果有多解,请输出字典序最小的那一个). s中无4或7,输出-1 4的个数大于等于7,输出4 否则输出7 幸运数字 II 定义一个数字为幸运数字当且仅当它的所有数位都是4或者7. 比如

牛客练习赛17

A 长方体 题目描述 给出共享长方体一个顶点的三个面的面积,求它十二条边的边长和. 输入描述: 一行三个整数a, b, c表示面积(1 <= a, b, c <= 10000). 输出描述: 一行一个整数表示边长和. 输入例子: 1 1 1 输出例子: 12 --> 示例1 输入 1 1 1 输出 12 示例2 输入 4 6 6 输出 28 节约时间就直接暴力做了. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 i