NEERC13 Problem H.Hack Protection

Solution

注意到题目中的区间与,在左端点lll确定的情况下,对于所有r≥lr\geq lr≥l,ANDl,rAND_{l,r}ANDl,r​只有logloglog种取值,这是一个极为常见的性质。

于是我们从大到小枚举lll,可以维护每一位什么时候变成000,即可求出每一段(li,ri,xi)(l_i,r_i,x_i)(li​,ri​,xi​)表示ANDl,t∈[li,ri]=xiAND_{l,t\in [l_i,r_i]}=x_iANDl,t∈[li​,ri​]​=xi​,用异或前缀和SiS_iSi​表示ANDl,t=StxorSl−1AND_{l,t}=S_t\ xor\ S_{l-1}ANDl,t​=St​ xor Sl−1​,就变成求St=Sl−1xorxi,t∈[l,r]S_t=S_l-1\ xor \ x_i,t\in[l,r]St​=Sl​−1 xor xi​,t∈[l,r]的个数,直接离散化之后用vectorvectorvector维护即可。

Code

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=998244353;
const int MAXN=200005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
ll ans=0;
map<int,int> Map;
vector<int> V[MAXN];
int nxt[35],a[MAXN],s[MAXN];
set<PR> Set;
int solve(int l,int r,int x)
{if (l>r||!Map.count(x)) return 0;int t=Map[x];return lower_bound(V[t].begin(),V[t].end(),-l+1)-lower_bound(V[t].begin(),V[t].end(),-r);
}
signed main()
{//  freopen("hack.in","r",stdin);
//  freopen("hack.out","w",stdout);int n=read(),num=0;for (int i=1;i<=n;i++) {a[i]=read(),s[i]=s[i-1]^a[i];if (!Map.count(s[i])) Map[s[i]]=++num;}for (int i=0;i<31;i++) nxt[i]=n+1,Set.insert(MP(n+1,i));for (int i=n;i>=1;i--){for (int j=0;j<31;j++) if (!((a[i]>>j)&1)) Set.erase(MP(nxt[j],j)),nxt[j]=i,Set.insert(MP(nxt[j],j));V[Map[s[i]]].PB(-i);int lst=i,nw=(oo-1)<<1|1;for (set<PR>::iterator it=Set.begin();it!=Set.end();++it) ans+=solve(lst,(it->fi)-1,s[i-1]^nw),nw^=(1<<(it->se)),lst=(it->fi);ans+=solve(lst,n,s[i-1]^nw);}printf("%lld\n",ans);return 0;
}

NEERC13 Problem H.Hack Protection相关推荐

  1. Problem H: 今年第几天?

    Problem H: 今年第几天? Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 723  Solved: 310 Description 定义一个函 ...

  2. C-11 Problem H: 开宝箱2

    Problem H: 开宝箱2 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 1443 Solved: 860 Description 急先锋是一个商人 ...

  3. 2017广东工业大学程序设计竞赛决赛 Problem H: tmk买礼物(数论)

    tmk买礼物 Problem H: tmk买礼物 Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间, ...

  4. 广东工业大学第12届ACM程序设计大赛 Problem H: tmk买礼物

    Problem H: tmk买礼物 Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK ...

  5. CSUST选拔赛题解之-Problem H: 逃出监狱

    Problem H: 逃出监狱 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 116  Solved: 42 [Submit][Status][Web ...

  6. Problem H. 小凡与英雄救美

    问题 H: Problem H. 小凡与英雄救美 时间限制: 1 Sec 内存限制: 256 MB 题目描述 英雄救美的故事永不过时.在本题中,小凡将扮演英雄勇闯魔王的宫殿,来到公主身边. 小凡手上有 ...

  7. 实验8:Problem H: 正方形、长方形、立方体

    总的来说这几道题,只有质心算法最坑,至今还没得到OJ上显示的输出结果,其他题做法基本类似.只有一些小的知识点不同. Home Web Board ProblemSet Standing Status ...

  8. Problem H. 公孙玉龙

    Problem H. 公孙玉龙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

  9. Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何...

    Problem H. Parallel Worlds 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c7 ...

最新文章

  1. 学界 | DeepMind想用IQ题测试AI的抽象思维能力,进展还不错
  2. 怎么才能转入大数据领域 ,成为一名合格的大数据分析师...
  3. SPSS数据记录的选择(Select Cases)
  4. SpringBoot v2.2.6版本遇到的坑------Thymeleaf的sec:authorize标签无效
  5. 设计模式——责任链模式
  6. js和php能生成一样的随机数_JavaScript_JS生成某个范围的随机数【四种情况详解】,前言: JS没有现成的函数,能 - phpStudy...
  7. C++学习之路 | PTA乙级—— 1007 素数对猜想 (20分)(精简)
  8. C语言,全局变量与局部变量问题
  9. 解决Redis缓存雪崩、穿透、并发、预热、击穿、热点Key等问题
  10. STM8单片机串口同时识别自定义协议和Modbus协议
  11. 为什么 Math.min() 比 Math.max() 大?
  12. Sublime Text 3 插件和python环境
  13. java pdf合并_利用iText 合并PDF与分解PDF的例子
  14. 2020-12-24 微信小程序 tabbar icon 控件 阿里矢量图库
  15. PMP和PRINCE2到底有什么区别?哪个含金量更高?
  16. HTML在线转换成PDF
  17. \u开头的字符串是什么意思?
  18. java8 LocalDate获取自然周的方法
  19. 分享:如何分解质因数之python实现(例如90分解质因数:90=2x3x3x5)
  20. Eva 初学算法笔记 —— 1.直接插入排序

热门文章

  1. python列表生成多个号码_python遍历多个列表生成列表或字典
  2. 莫利定理的超直观演示!
  3. 想追身边的女孩?哥们我只能帮到你这份上了
  4. “财务自由的15个阶段!说说你到哪个阶段了?”
  5. 一位像素艺术家用39张动图,将大自然的唯美尽收眼底…
  6. python distplot 图_Python可视化23 |seaborn.distplot公司单变量分布图(直方图|核密度图),23seaborndistplot...
  7. windows分区给linux根目录,解决双系统安装Linux之后找不到Windows分区
  8. 大神讲解Java for循环的几种用法
  9. android studio初始化设置,Android studio 初始设置
  10. 数据结构——二叉树的双序遍历