\(\mathcal{Description}\)

  OurOJ.

  给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{and},\operatorname{or},\operatorname{xor}\}\),对于 \(i\in[2,n]\),求出 \(\max_{j\in[1,i)}\{a_i\operatorname{op} a_j\}\) 以及 \(|\arg\max_{j\in[1,i)}\{a_i\operatorname{op} a_j\}|\)。

  \(n\le10^5\),\(a_i<2^{16}\)。

\(\mathcal{Solution}\)

  也许算是 Meet in Middle?从左到右在线更新可用的 \(a_j\) 信息并求出对于当前 \(i\) 的答案,维护一个 \(f(u,v)\),表示选取的 \(a_j\) 的高八位是 \(u\) 且 \(a_i\) 的低八位是 \(v\) 时,低八位能得到的最大值以及方案数。那么更新时,用当前 \(a_j\) 的低八位更新所有 \(f(u,i)\);查询时枚举高八位选择的值 \(i\),并用 \(f(i,v)\) 更新答案。最终复杂度为 \(\mathcal O(n\sqrt A)\)。

  确实是比较巧妙的复杂度平衡,也是一个实用的 trick√

\(\mathcal{Code}\)

/*~Rainybunny~*/

#include <bits/stdc++.h>

#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i ) typedef std::pair<int, int> PII;
#define fi first
#define se second const int MAXN = 1e5, MAXSV = 1 << 8;
int n, a[MAXN + 5];
char op[5];
PII f[MAXSV][MAXSV]; inline void update( const int x, const auto& opt ) {
int h = x >> 8, l = x ^ h << 8;
rep ( i, 0, MAXSV - 1 ) {
int v = opt( i, l );
if ( f[h][i].fi < v ) f[h][i] = { v, 1 };
else if ( f[h][i].fi == v ) ++f[h][i].se;
}
} inline PII query( const int x, const auto& opt ) {
int l = x & ( ( 1 << 8 ) - 1 );
PII ret( 0, 0 );
rep ( h, 0, MAXSV - 1 ) if ( f[h][l].se ) {
int cur = opt( h, x >> 8 ) << 8 | f[h][l].fi;
if ( ret.fi < cur ) ret = { cur, f[h][l].se };
else if ( ret.fi == cur ) ret.se += f[h][l].se;
}
return ret;
} inline void solve( const auto& opt ) {
update( a[1], opt );
rep ( i, 2, n ) {
PII ans( query( a[i], opt ) );
printf( "%d %d\n", ans.fi, ans.se ), update( a[i], opt );
}
} int main() {
scanf( "%d %s", &n, op );
rep ( i, 1, n ) scanf( "%d", &a[i] );
if ( op[0] == 'x' ) {
solve( []( const int u, const int v ) { return u ^ v; } );
} else if ( op[0] == 'a' ) {
solve( []( const int u, const int v ) { return u & v; } );
} else {
solve( []( const int u, const int v ) { return u | v; } );
}
return 0;
}

Solution -「LOCAL」二进制的世界的更多相关文章

  1. Solution -「LOCAL」大括号树

    \(\mathcal{Description}\)   OurTeam & OurOJ.   给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...

  2. Solution -「LOCAL」过河

    \(\mathcal{Description}\)   一段坐标轴 \([0,L]\),从 \(0\) 出发,每次可以 \(+a\) 或 \(-b\),但不能越出 \([0,L]\).求可达的整点数. ...

  3. Solution -「LOCAL」Drainage System

    \(\mathcal{Description}\)   合并果子,初始果子的权值在 \(1\sim n\) 之间,权值为 \(i\) 的有 \(a_i\) 个.每次可以挑 \(x\in[L,R]\) ...

  4. Solution -「LOCAL」Burning Flowers

      灼之花好评,条条生日快乐(假装现在 8.15)! \(\mathcal{Description}\)   给定一棵以 \(1\) 为根的树,第 \(i\) 个结点有颜色 \(c_i\) 和光亮值 ...

  5. Solution -「LOCAL」画画图

    \(\mathcal{Description}\)   OurTeam.   给定一棵 \(n\) 个点的树形随机的带边权树,求所有含奇数条边的路径中位数之和.树形生成方式为随机取不连通两点连边直到全 ...

  6. Solution -「LOCAL」ZB 平衡树

    \(\mathcal{Description}\)   OurOJ.   维护一列二元组 \((a,b)\),给定初始 \(n\) 个元素,接下来 \(m\) 次操作: 在某个位置插入一个二元组: 翻 ...

  7. Solution -「LOCAL」舟游

    \(\mathcal{Description}\)   \(n\) 中卡牌,每种三张.对于一次 \(m\) 连抽,前 \(m-1\) 次抽到第 \(i\) 种的概率是 \(p_i\),第 \(m\) ...

  8. Solution -「LOCAL」充电

    \(\mathcal{Description}\)   给定 \(n,m,p\),求序列 \(\{a_n\}\) 的数量,满足 \((\forall i\in[1,n])(a_i\in[1,m])\l ...

  9. Solution -「LOCAL」「cov. 牛客多校 2020 第五场 C」Easy

    \(\mathcal{Description}\)   Link.(完全一致)   给定 \(n,m,k\),对于两个长度为 \(k\) 的满足 \(\left(\sum_{i=0}^ka_i=n\r ...

随机推荐

  1. android 解决报错 installation failed with message Failed to finalize session : INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: Failed parse during installPackageLI: Failed to read manifest from /xx/xx/xx.apk

    新工程启动报错 怎么办? 解决: 将这个选项去掉勾选后点击ok即可

  2. js 关于 data.xuNum = xuNum++; 赋值写法 的探讨

    1 .源码 let xuNum = 0; let data = []; data.xuNum = xuNum++; console.log(data.xuNum) 2.打印结果 //  0 3.原因 ...

  3. warmup(HCTF 2018)

    为啥想写这道题的wp呢,因为这道题就是照着phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)复现出来的 题目 查看源码很容易找到source.php,直接访问 分析 题 ...

  4. 干掉 Postman?测试接口直接生成API文档,ApiPost真香!

    实不相瞒我的收藏夹里躺着很多优质的开发工具,我有个爱好平时遇到感兴趣的开发工具都会记录下来,然后有时间在慢慢研究.前几天刚给同事分享一款非常好用的API文档工具,真的被惊艳到了,粉丝朋友们也感受一下吧 ...

  5. [FatFs 学习] SD卡总结-SPI模式

    SD卡为移动设备提供了安全的,大容量存储解决方法.它本身可以通过两种总线模式和MCU进行数据传输,一种是称为SD BUS的4位串行数据模式,另一种就是大家熟知的4线SPI Bus模式.一些廉价,低端的 ...

  6. 读书笔记http之第一章

    http TCP/IP协议各层: 应用层 决定了向用户提供应用服务时通信的活动. 比如 : FTP(FileTransferProtocol,文件传输协议)和DNS(DomainNameSystem, ...

  7. [JavaWeb]利用JSP的编码特性制作免杀后门

    利用JSP的编码特性制作免杀后门 这里是借鉴了Y4stacker师傅的thinkings 待解决的问题 JSP解析 JSP"乱码"为什么还能被识别 "乱码"的J ...

  8. gin框架的热加载方法

    gin是用于实时重新加载Go Web应用程序的简单命令行实用程序.只需gin在您的应用程序目录中运行,您的网络应用程序将 gin作为代理提供.gin检测到更改后,将自动重新编译您的代码.您的应用在下次 ...

  9. 集合框架-Map集合练习-记录字母次数思路及代码

    1 package cn.itcast.p10.map.test; 2 3 import java.util.Iterator; 4 import java.util.Map; 5 import ja ...

  10. 第07讲:Flink 常见核心概念分析

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...