给你n个数,问有几个区间满足,区间内或操作大于区间内的任意数。

首先可以知道,两数或操作的结果必定不会小于两者间的最大值,也就是说对于一个区间中,不合法的状态只有两值或相等。那么我们可以考虑枚举每个数,向左向右找到第一个或不相等的,那么该数对所有不合法区间的贡献就能找到了,所以与其找合法的区间不如容斥找不合法的区间。

具体从左往右枚举每个数,同时记录该数某二进制位为0时,左侧数中该位出现1的离i的最近位置,得到左边界。右边界类似。

然后就是要注意重复的数,重复的数出现直接就使区间不合法,左右两侧收缩边界时只要有一侧考虑重复数即可。

  1. /** @Date : 2017-10-16 23:43:44
  2. * @FileName: F.cpp
  3. * @Platform: Windows
  4. * @Author : Lweleth (SoungEarlf@gmail.com)
  5. * @Link : https://github.com/
  6. * @Version : $Id$
  7. */
  8. #include <bits/stdc++.h>
  9. #define LL long long
  10. #define PII pair<int ,int>
  11. #define MP(x, y) make_pair((x),(y))
  12. #define fi first
  13. #define se second
  14. #define PB(x) push_back((x))
  15. #define MMG(x) memset((x), -1,sizeof(x))
  16. #define MMF(x) memset((x),0,sizeof(x))
  17. #define MMI(x) memset((x), INF, sizeof(x))
  18. using namespace std;
  19.  
  20. const int INF = 0x3f3f3f3f;
  21. const int N = 2e5+20;
  22. const double eps = 1e-8;
  23.  
  24. int a[N];
  25. LL l[N];
  26. LL r[N];
  27. LL t[N];
  28. map<int, int>q;
  29. int main()
  30. {
  31. LL n;
  32. cin >> n;
  33. for(int i = 1; i <= n; i++)
  34. scanf("%d", a + i);
  35. LL ans = 0;
  36. for(int i = 1; i <= n; i++)
  37. {
  38. l[i] = q[a[i]];//标记重复数位置,重复数必定使区间不合法
  39. for(int j = 0; j < 31; j++)
  40. {
  41. if((a[i] & (1LL << j)))
  42. t[j] = i;
  43. else l[i] = max(l[i], t[j]);
  44. }
  45. q[a[i]] = i;
  46. }
  47. for(int i = 0; i < 31; i++)
  48. t[i] = n + 1;
  49. for(int i = n; i >= 0; i--)
  50. {
  51. r[i] = n + 1;
  52. for(int j = 0; j < 31; j++)
  53. {
  54. if((a[i] & (1LL << j)))
  55. t[j] = i;
  56. else r[i] = min(r[i], t[j]);
  57. }
  58. }
  59. for(int i = 1; i <= n; i++)
  60. {
  61. //cout << l[i] <<"~"<< i << "~"<< r[i] << endl;
  62. ans -= (i - l[i]) * (r[i] - i);
  63. }
  64. ans += n * (n + 1LL) / 2LL;
  65. printf("%lld\n", ans);
  66. return 0;
  67. }

CF876 F 思维 枚举的更多相关文章

  1. Educational Codeforces Round 61 F 思维 + 区间dp

    https://codeforces.com/contest/1132/problem/F 思维 + 区间dp 题意 给一个长度为n的字符串(<=500),每次选择消去字符,连续相同的字符可以同 ...

  2. 2017广东工业大学程序设计竞赛初赛 题解&源码(A,水 B,数学 C,二分 D,枚举 E,dp F,思维题 G,字符串处理 H,枚举)

    Problem A: An easy problem Description Peter Manson owned a small house in an obscure street. It was ...

  3. zoj 3983 Crusaders Quest 思维+枚举

    题目链接 这道题意思是: 给你一个长度为9的字符串,且只有3个a.3个g.3个o 问,你可以选择删除一段连续的串或者单个的字符也可以不删,最多会出现几个三子相连的子串 比如:agoagoago只有将两 ...

  4. cf1060C. Maximum Subrectangle(思维 枚举)

    题意 题目链接 Sol 好好读题 => 送分题 不好好读题 => 送命题 开始想了\(30\)min数据结构发现根本不会做,重新读了一遍题发现是个傻逼题... \(C_{i, j} = a ...

  5. CodeForces-Zuhair and Strings(思维+枚举)

    Given a string ss of length nn and integer kk (1≤k≤n1≤k≤n). The string ss has a level xx, if xx is l ...

  6. HDU 6216 A Cubic number and A Cubic Number【数学思维+枚举/二分】

    Problem Description A cubic number is the result of using a whole number in a multiplication three t ...

  7. Java 学习笔记 执行外部命令 包装类 枚举类型

    执行外部命令 Runtime只能通过静态方法getRuntime获得,可以用来执行外部的命令 Runtime runtime = Runtime.getRuntime(); runtime.exec( ...

  8. c++官方文档-枚举-联合体-结构体-typedef-using

    #include<iostream> #include <new> #include<stdio.h> using namespace std; /** * url ...

  9. AtCoder Regular Contest

    一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状 ...

随机推荐

  1. PAT甲题题解-1005. Spell It Right (20)-数位求和,水

    把每个位上的数字求和sum,然后以英文单词的形式输出sum的每个位 #include <iostream> #include <cstdio> #include <alg ...

  2. PAT甲题题解-1110. Complete Binary Tree (25)-(判断是否为完全二叉树)

    题意:判断一个节点为n的二叉树是否为完全二叉树.Yes输出完全二叉树的最后一个节点,No输出根节点. 建树,然后分别将该树与节点树为n的二叉树相比较,统计对应的节点个数,如果为n,则为完全二叉树,否则 ...

  3. mybatis mapper使用记录

    insert://插入一条数据//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)//优先使用传入的参数值,参数值空时,才会使用序列.UUID,自动增长int i ...

  4. ElasticSearch 2 (5) - Document APIs

    ElasticSearch 2.1.1 (5) - Document APIs This section describes the following CRUD APIs: Single docu ...

  5. 个人作业-Week 2 代码复审

    一.概要部分 1.代码能符合需求和规格说明么? 经过我自己的测试和助教的检测,他的代码符合需求和规格的说明. 2.代码设计是否有周全的考虑? 这里代码设计我们是从两个方面检查的: 对方处理控制台输入的 ...

  6. 第十一周(11.24-12.01)----ptim测试程序运行速度

    我在dos下用ptime指令对分数运算(http://www.cnblogs.com/YangXiaomoo/p/6095583.html)的运行时间进行了测试.测试结果一般都在0.212-0.217 ...

  7. Cisco Packet Tracer 交换机 2950-24 配置

    大步骤1:设置交换机名字.特权模式口令.本地管理口令.远程登入口令  Switch>en   进入特权模式 Switch#conf t    进去全局配置模式 Enter configurati ...

  8. 转帖:Android 官方推荐 : DialogFragment 创建对话框

    转: Android 官方推荐 : DialogFragment 创建对话框 复制内容,留作备份 1. 概述 DialogFragment在android 3.0时被引入.是一种特殊的Fragment ...

  9. 6 vue-cli mock数据

    https://www.cnblogs.com/dengxiaolei/p/7338773.html //--------------------------------------const por ...

  10. information_schema系列十一

    1: INNODB_CMP 和INNODB_CMP_RESET 这两个表存储的是关于压缩INNODB信息表的时候的相关信息, Column name Description PAGE_SIZE Com ...