CF 983B XOR

Wesley13
• 阅读 578

CF 983B XOR-pyramid(区间dp,异或)

若有一个长度为m的数组b,定义函数f为:

$f(b) = \begin{cases} b[1] & \quad \text{if } m = 1, \ f(b[1] \oplus b[2],b[2] \oplus b[3],\dots,b[m-1] \oplus b[m]) & \quad \text{otherwise} \end{cases}$

现在给出长度为n(n<=5000)的数组a,询问q(q<=100000)次,每次询问区间$[li,ri]$的子区间中,f的最大值。

可以发现,$f([l,r])$迭代到倒数第二层,会变成$f(f([l,r-1]),f([l+1, r]))=f([l, r-1])\oplus f([l+1, r])$。因此这个就变成区间dp水题了。

#include <cstdio> 
#include <algorithm>
using namespace std;

const int maxn=5005;
int n, q, f[maxn][maxn], maxm[maxn][maxn];  //f[i][j]储存f(ai~aj)的值 

int main(){
    scanf("%d", &n); int k;
    for (int i=1; i<=n; ++i){
        scanf("%d", &f[i][i]); 
        maxm[i][i]=f[i][i];
    }
    for (int i=2; i<=n; ++i)  //区间长度 
        for (int j=1; j<=n-i+1; ++j){  //区间起点 
            k=j+i-1;  //区间终点 
            f[j][k]=f[j][k-1]^f[j+1][k];
            maxm[j][k]=max(maxm[j][k-1], maxm[j+1][k]);
            if (f[j][k]>maxm[j][k]) maxm[j][k]=f[j][k];
        }
    scanf("%d", &q); int l, r; 
    for (int i=0; i<q; ++i){
        scanf("%d%d", &l, &r);
        printf("%d\n", maxm[l][r]);
    }
    return 0;
}
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
2年前
springboot的起步依赖
!(https://oscimg.oschina.net/oscnet/f3acbe4cf3b00c68207e091c172d6b45a27.png)加载自动配置的方式2:!(https://oscimg.oschina.net/oscnet/40341228c10f7a56d82323a1d622521d92d.png) spring
Wesley13 Wesley13
2年前
6个美观的纯CSS渐变背景代码分享(亲测有效)
!(https://oscimg.oschina.net/oscnet/f526aa328075142038f64d80042badea655.png)样式1backgroundimage:lineargradient(160deg,b100ff20%,00b3ff80%);样式2backg
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Hacker News 简讯 2021
!(https://oscimg.oschina.net/oscnet/up3b137e2e6620f7a63f11a96485b1fb3b.png)最后更新时间:2021011823:00
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
2年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Stella981 Stella981
2年前
Redis 6.0 正式版终于发布了!除了多线程还有什么新功能?
!(https://oscimg.oschina.net/oscnet/b8c8b22b9f44bd806c26b486e1893a263a4.jpg)这是我的第56篇原创文章!(https://oscimg.oschina.net/oscnet/8bf00bc92f6a1cd46596ee44bac64a801ae.pn
Stella981 Stella981
2年前
Hacker News 简讯 2020
!(https://oscimg.oschina.net/oscnet/up3b137e2e6620f7a63f11a96485b1fb3b.png)最后更新时间:2020082623:00