CF 983B XOR-pyramid(区间dp,异或)
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;
}
CF 983B XOR-pyramid(区间dp,异或)的更多相关文章
- Codeforces 983B. XOR-pyramid【区间DP】
LINK 定义了一种函数f 对于一个数组b 当长度是1的时候是本身 否则是用一个新的数组(长度是原数组-1)来记录相邻数的异或,对这个数组求函数f 大概是这样的: \(f(b[1]⊕b[2],b[2] ...
- CF 149D Coloring Brackets 区间dp ****
给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2.每对括号必须只能给其中的一个上色 3.相邻的两个不能上同色,可以都不上色 求0-len-1这一区间内 ...
- CodeForces - 983B XOR-pyramid(区间dp,异或)
XOR-pyramid time limit per test 2 seconds memory limit per test 512 megabytes input standard input o ...
- 51Nod XOR key —— 区间最大异或值 可持久化字典树
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1295 1295 XOR key 题目来源: HackerRa ...
- CF D. Recovering BST (区间DP)
题意:给你n个节点,每个节点有一个权值,两个点可以连边当且仅当这两个点的gcd>1,问你这n个点能否构成一个二叉搜索树(每个节点最多有两个儿子,且左儿子小于右儿子),输入为递增顺序. 分析: 若 ...
- Atcoder Beginner Contest 121 D - XOR World(区间异或和)
题目链接:https://atcoder.jp/contests/abc121/tasks/abc121_d 题目很裸(Atcoder好像都比较裸 就给一个区间求异或和 n到1e12 肯定不能O(n) ...
- CF 979D Kuro and GCD and XOR and SUM(异或 Trie)
CF 979D Kuro and GCD and XOR and SUM(异或 Trie) 给出q(<=1e5)个操作.操作分两种,一种是插入一个数u(<=1e5),另一种是给出三个数x, ...
- Codeforces Round #354 (Div. 2)-C. Vasya and String,区间dp问题,好几次cf都有这种题,看来的好好学学;
C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input standard ...
- CF R 635 div1 C Kaavi and Magic Spell 区间dp
LINK:Kaavi and Magic Spell 一打CF才知道自己原来这么菜 这题完全没想到. 可以发现 如果dp f[i][j]表示前i个字符匹配T的前j个字符的方案数 此时转移变得异常麻烦 ...
随机推荐
- C中malloc的使用(转)
malloc函数 原型:extern void *malloc(unsigned int num_bytes); 用法:#include <malloc.h> 功能:分配长度为num_b ...
- shingling算法——提取特征,m个hash函数做指纹计算,针对特征hash后变成m维向量,最后利用union-find算法计算相似性
shingling算法用于计算两个文档的相似度,例如,用于网页去重.维基百科对w-shingling的定义如下: In natural language processing a w-shinglin ...
- C++quickSort
void QuickSort1(int *s,int left,int right){ int i,j,t,pivot; if(left>right) return; if(left<ri ...
- hibernate复习第(一)天
首先导入jar. 这个版本是3.2.5 开发流程: 1.由Domain object ->mapping ->db (官方推荐) 2.由DB开始,使用工具生成mapping和Domain ...
- 在开发环境中,自己搭建一个ssl环境(小例子)
做项目的时候自己总结的一些小例子 public class Test { public static void setSSLProperty() { Security.addProvider(new ...
- codeforces 631A A. Interview
A. Interview time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- [原]NYOJ-A*B Problem II-623
大学生程序代写 A*B Problem II 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 ACM的C++同学有好多作业要做,最头痛莫过于线性代数了,因为每次做到矩阵相 ...
- Windows下安装MySQL-5.7.19
下载MySQL-5.7.19版本,解压之后发现安装包不是一个exe文件: 于是网上找资料,发现了另外一种安装方法. 1.新建一个环境变量,我的电脑-属性-高级-环境变量-系统变量-新建 2.在系统变量 ...
- Poj 2602 Superlong sums(大数相加)
一.Description The creators of a new programming language D++ have found out that whatever limit for ...
- C#程序运行计时
var stp = new System.Diagnostics.Stopwatch(); stp.Start();//计时启动 ..........程序代码........... stp.Stop( ...