https://www.nowcoder.com/acm/contest/81/E

给一个1-base数组{a},有N次操作,每次操作会使一个位置无效。一个区间的权值定义为这个区间里选出一些数的异或和的最大值。求在每次操作前,所有不包含无效位置的区间的权值的最大值。

不想说啥,这题意看错好几次,区间不能合并起来算,直接用线性基维护区间异或最大值,区间分割用并查集维护

  1. //#pragma comment(linker, "/stack:200000000")
  2. //#pragma GCC optimize("Ofast,no-stack-protector")
  3. //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  4. //#pragma GCC optimize("unroll-loops")
  5. #include<bits/stdc++.h>
  6. #define fi first
  7. #define se second
  8. #define mp make_pair
  9. #define pb push_back
  10. #define pi acos(-1.0)
  11. #define ll long long
  12. #define vi vector<int>
  13. #define mod 1000000007
  14. #define C 0.5772156649
  15. #define ls l,m,rt<<1
  16. #define rs m+1,r,rt<<1|1
  17. #define pil pair<int,ll>
  18. #define pli pair<ll,int>
  19. #define pii pair<int,int>
  20. #define cd complex<double>
  21. #define ull unsigned long long
  22. //#define base 1000000000000000000
  23. #define fio ios::sync_with_stdio(false);cin.tie(0)
  24.  
  25. using namespace std;
  26.  
  27. const double g=10.0,eps=1e-;
  28. const int N=+,maxn=+,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
  29.  
  30. vector<ll> base[N];
  31. ll ans[N],a[N],qu[N];
  32. int fa[N];
  33. bool ok[N];
  34. int Find(int x)
  35. {
  36. return fa[x]==x?x:fa[x]=Find(fa[x]);
  37. }
  38. void Merge(int x,int y)
  39. {
  40. for(int i=;i<base[y].size();i++)
  41. {
  42. ll te=base[y][i];
  43. for(int j=;j<base[x].size();j++)
  44. te=min(te,te^base[x][j]);
  45. if(te)base[x].pb(te);
  46. }
  47. }
  48. int main()
  49. {
  50. int n;scanf("%d",&n);
  51. for(int i=;i<=n;i++)scanf("%lld",&a[i]),fa[i]=i;
  52. for(int i=;i<=n;i++)scanf("%lld",&qu[i]);
  53. ll res=;
  54. for(int i=n;i>=;i--)
  55. {
  56. ll x=a[qu[i]];
  57. ok[qu[i]]=;
  58. for(int j=;j<base[qu[i]].size();j++)
  59. x=min(x,x^base[qu[i]][j]);
  60. if(x)base[qu[i]].pb(x);
  61. if(qu[i]!=&&ok[qu[i]-])
  62. {
  63. int te=Find(qu[i]-);
  64. Merge(qu[i],te);
  65. fa[te]=qu[i];
  66. }
  67. if(qu[i]!=n&&ok[qu[i]+])
  68. {
  69. int te=Find(qu[i]+);
  70. Merge(qu[i],te);
  71. fa[te]=qu[i];
  72. }
  73. vector<ll>pp;
  74. for(int j=;j<base[qu[i]].size();j++)pp.pb(base[qu[i]][j]);
  75. sort(pp.begin(),pp.end());
  76. ll sum=;
  77. for(int j=pp.size()-;j>=;j--)
  78. sum=max(sum,sum^pp[j]);
  79. res=max(res,sum);
  80. ans[i]=res;
  81. }
  82. for(int i=;i<=n;i++)printf("%lld\n",ans[i]);
  83. return ;
  84. }
  85. /***********************
  86. 10
  87. 169 816 709 896 58 490 97 254 99 796
  88. 4 2 3 10 5 6 1 8 9 7
  89. ***********************/

Wannafly挑战赛14E无效位置的更多相关文章

  1. Wanafly 挑战赛 14 E 无效位置 (线性基+并查集)

    Wanafly 挑战赛 14 E 无效位置 (线性基+并查集) 传送门:https://ac.nowcoder.com/acm/contest/81/#question 题意: n个数,m次操作 一个 ...

  2. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  3. wannafly挑战赛14

    第一次打wannafly..觉得自己好菜啊... 题目描述 在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥. 整天与整数打交道的小明 ...

  4. Wannafly挑战赛26-F. msc的棋盘(模型转化+dp)及一类特殊的网络流问题

    题目链接 https://www.nowcoder.com/acm/contest/212/F 题解 我们先考虑如果已知了数组 \(\{a_i\}\) 和 \(\{b_i\}\),如何判断其是否合法. ...

  5. Wannafly挑战赛21:C - 大水题

    链接:Wannafly挑战赛21:C - 大水题 题意: 现在给你N个正整数ai,每个数给出一“好数程度” gi(数值相同但位置不同的数之间可能有不同的好数程度).对于在 i 位置的数,如果有一在j位 ...

  6. 【Wannafly挑战赛29F】最后之作(Trie树,动态规划,斜率优化)

    [Wannafly挑战赛29F]最后之作(Trie树,动态规划,斜率优化) 题面 牛客 题解 首先考虑怎么计算\([l,r]\)这个子串的不同的串的个数. 如果\(l=1\),我们构建\(Trie\) ...

  7. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  8. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  9. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

随机推荐

  1. Struts2 iterator标签实现嵌套循环

    问题:有一个List<List<Object>>  list用struts2在页面显示使用<s:iterator value=”list” var=”list1″> ...

  2. 1141 PAT Ranking of Institutions[难]

    1141 PAT Ranking of Institutions (25 分) After each PAT, the PAT Center will announce the ranking of ...

  3. 网页采集利器 phpQuery

    网页采集利器 phpQuery 2012-02-28 11:43:24|  分类: php|举报|字号 订阅     在网页采集的时候,通常都会用到正则表达式.但是有时候对于正则不太好的同学,比如我, ...

  4. python中变量的交换

    a=4 b=5 #第一种 c=0 c=a a=b b=c print('a=%d,b=%d'%(a,b)) #第二种 a=a+b b=a-b a=a-b print('a=%d,b=%d'%(a,b) ...

  5. ionic简介

    CordovaCordova是贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,是驱动PhoneGap的核心引擎.提供了一组设备相关的API,通过这组API,移动应用能够以Java ...

  6. BFC 详说 Block Formatting Contexts (块级格式化上下文)

    定位方案是控制元素的布局,在 CSS 2.1 中,有三种定位方案——普通流 (Normal Flow) .浮动 (Floats) 和绝对定位 (Absolute Positioning) ,下面分别对 ...

  7. 企业规范化管理系统iClap前生后世全解析

    iClap是一个产品管理系统,专注于为移动互联网企业提供企业规范化解决方案,改变传统的产品管理模式,实现产品管理场景化.APP.甚至原型图.效果图都可以直接进行批注和任务的协作,实时将你要修改的内容或 ...

  8. [2013-1-29] Air 安卓 天气预报源码

    开源一个air android纯代码天气预报源码,未作优化~ ,仅供学习使用,勿作商用~   花了两天时间,随便写了个天气预报 小应用 .纯代码,没有用组件,所以体积要小点.效率么...主要是没有去优 ...

  9. 编码解码--三种常见字符编码简介:ASCII、Unicode和UTF-8

    什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255( ...

  10. 八皇后问题解题报告(dfs

    这里是代码传送门 所谓八皇后问题,一开始接触,上学期舍友提及的,但是因为各种原因,水平不够,并没有关心,偶然之间,再次遇见,便进行的尝试(棋盘是0-7的,不是1-8的...开始打弄错了) 所谓八皇后问 ...