题目大意

给出nnn个数a1,a2,⋯,ana_1,a_2,\cdots,a_na1​,a2​,⋯,an​,每个数在二进制下,可以任意交换0和1的位置(也可以不交换),问有多少个区间[l,r][l,r][l,r]满足在每个数在操作之后的异或和为0。

时间限制

2s

数据范围

n≤3×105n\le 3\times 10^5n≤3×105
ai≤1018a_i\le 10^{18}ai​≤1018

题解

不难发现,只需要关心这个数在二进制下1的个数,而不要具体关注这个数是什么。
那么考虑一下满足条件的区间中1的个数,
显然1的个数一定是偶数,不然1无法两两匹配在异或的时候消去。
除了这个条件,还有没有别的条件,
显然是有的,来看这种情况:
两个相邻的数,一个数有31个1,另一个数只有1个1,它们的和是偶数,但是它们并不满足条件。

因此多了一个条件,这个区间其它数1的个数的和要比的最多1的那个数要大。

不难发现,这个最大值只有60,对于这部分情况可以之间枚举,其余的情况通过前缀和计算。

Code

//#pragma GCC optimize (2)
//#pragma G++ optimize (2)
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <queue>
#include <map>
#include <set>
#define ll long long
#define G getchar
using namespace std;ll read()
{char ch;for(ch = G();(ch < '0' || ch > '9') && ch != '-';ch = G());ll n = 0 , w;if (ch == '-'){w = -1;ch = G();} else w = 1;for(;'0' <= ch && ch <= '9';ch = G())n = (n<<1)+(n<<3)+ch-48;return n * w;
}void write(int x)
{if (x > 9){write(x / 10);putchar(x % 10 + 48);}else putchar(x + 48);
}const int N = 300005;int n , s[N] , num[N][3] , tmp , mx , a[N];
ll ans , x , z[63];int main()
{//freopen("d.in","r",stdin);//freopen("e.out","w",stdout);z[0] = 1;for (int i = 1 ; i < 63 ; i++)z[i] = z[i - 1] << 1;n = read();num[0][0] = 1;memset(a , 0 , sizeof(a));for (int i = 1 ; i <= n ; i++){x = read();for (int j = 0 ; z[j] <= x ; j++)if (z[j] & x) a[i]++;s[i] = (s[i - 1] + a[i]) % 2;num[i][0] = num[i - 1][0];num[i][1] = num[i - 1][1];num[i][s[i]]++;mx = tmp = a[i];for (int j = i - 1 ; j ; j--){if (tmp > 120){ans = ans + num[j - 1][s[i]];break;}tmp = tmp + a[j];mx = max(mx , a[j]);if (tmp >= mx * 2 && tmp % 2 == 0) ans++;}}printf("%lld\n", ans);return 0;
}

Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequen相关推荐

  1. Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】...

    传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...

  2. szu cf套题训练Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3)A~D题解报告

    A. Math Problem 题目大意:就是给你n个线段,你自己再添加一个线段d使得d和所有的线段都有交点,求d这个线段的最小长度是多少 解题思路: 1.首先看d线段的左端点,就是左端点选取的是所有 ...

  3. Codeforces Round #440 (Div. 2, based on Technocup 2018 Elimination Round 2)

    一场挺简单的CF,但是我打炸了啊 A. Search for Pretty Integers time limit per test 1 second memory limit per test 25 ...

  4. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) 构造

    传送门 文章目录 题意: 思路: 题意: 给nnn个数,让你构造一个尽可能大的矩阵,其中每个点所在的行和列都不含相等元素. 思路: 假设构造的答案矩阵大小为a×ba×ba×b且a<=ba< ...

  5. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维

    传送门 文章目录 题意: 思路: 题意: 给一张图,求必须经过aaa点和bbb点的路径条数. 思路: 通过观察我们发现,这个路径无非就是x−>a−>b−>yx->a->b ...

  6. Codeforces Round #759 (Div. 2, based on Technocup 2022 Elimination Round 3)

    感觉E思路明确只用了stl+树状数组,F线段树复合修改,为什么都是2400. A. Life of a Flower B. Array Eversion C. Minimize Distance E. ...

  7. Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) 题解

    文章目录 A. Prison Break B. Restore Modulo C. Basic Diplomacy D. Playlist E. Skyline Photo F. Useful Edg ...

  8. Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round)【A、B、C题】

    A. Contest for Robots 签到题,注意特判即可. #include <bits/stdc++.h> using namespace std; const int N=11 ...

  9. Codeforces Round #709 (Div. 1, based on Technocup 2021 Final Round) A. Basic Diplomacy

    传送门 文章目录 题意: 思路: 题意: 有nnn个小朋友,让后你要在mmm天中每天都选择一个小朋友,给出这mmm天都可以选哪个小朋友,每个小朋友选的次数不超过⌈m2⌉\left \lceil \fr ...

  10. Codeforces Round #749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1)

    A. Windblume Ode 题意是给你一个数组.然后要你求得一个子序列,这个子序列每个数的和是一个合数,并且是该数组能得到的最大的合数.输出这个子序列中每个元素的下标. 一开始看到这个题目的n的 ...

最新文章

  1. linux--memcache的安装和使用(转)
  2. 2007年下半年 网络工程师 上下午试卷【附带答案】
  3. windows操作系统_如何正确使用windows操作系统?
  4. Python中将三个列表数据zip起来并遍历(Iterating through three lists in parallel)
  5. Nginx-09:Nginx原理
  6. Java《剑指Offer》面试题2:替换空格
  7. java agent_GitHub - dingjs/javaagent: 基于javaagent开发的APM工具,收集方法的执行次数和执行时间,定时输出成json格式的日志。...
  8. jQuery中this与$(this)的区别总结
  9. job.php打不开,cronjob上的PHP错误,在提示时工作正常
  10. python 相关性检验怎么计算p值_生信工具 | 相关性热图还能玩出什么花样?
  11. DRBD+Corosync+Pacemaker+MySQL(下)
  12. 更改MAC终端显示的主机名
  13. Oralce UTL_SMTP发送邮件的发送时间处理
  14. Android 实现扫一扫功能
  15. VirtualBox
  16. Android 2020年最新保活方案 保活90% 已适配8.0 ,9.0, 10.0(酷狗音乐)
  17. 怎样黑进Microsoft:循序渐进指南 (转)
  18. 制作卡通(动漫风)效果
  19. 通过过滤器Filter来完成url访问权限限制
  20. trunk接口(华为)新手必看

热门文章

  1. 如何自己制作CHM电子书?
  2. 【YOLOV5-5.x 源码解读】plots.py
  3. 图像的二阶导数为何对噪声尤为敏感-----图像二阶导数的本质
  4. php如何做防抖,Vue中怎么对事件进行防抖和节流操作?
  5. 360抢票 网站维护中 你的登录被踢了!
  6. linux解压rar.gz,Linux tar.gz 、zip、rar 解压 压缩命令
  7. c盘瘦身。清理四个垃圾文件夹
  8. gmail邮件分组_如何使用Gmail和G Suite设置专业电子邮件地址
  9. 查看github的IP地址
  10. cf Educational Codeforces Round 47 E. Intercity Travelling