zoukankan      html  css  js  c++  java
  • CF 983B 序列函数

    CF 983B 序列函数

    一道本校神仙wucstdio出的毒瘤签到题

    题意:

      给你一段序列,求出它们的最大异或和。

    解法:

    其实这道题并不很难,但读题上可能会有困难。

    其实样例我是用Python 3才看懂的。。。emmm

    递归思想,令dp[0][i] = a[i],令dp[i][j] 为 第i层递归的第j个连续(i+1)个数的 f() 值,则再将dp[i][j] 更新为 dp[i][j], dp[i-1][j] 、dp[i-1][j-1] 的最大值。则查找 l~r 的最大值时,只需要输出 dp[r-l][l-1] 即可。

    CODE :

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    
    using namespace std;
    const int N = 5100;
    
    int m,n,a[N];
    int xor_sum[N][N];
    
    void work_first() {
    	for(int i = 2 ; i <= n ; i++) {
    		for(int j = i ; j <= n ; j++) {
    			xor_sum[i][j] = xor_sum[i - 1][j - 1] ^ xor_sum[i - 1][j];
    		}
    	}
    	for(int i = 1 ; i <= n ; i++) {
    		for(int j = i ; j <= n ; j++) {
    			int xor_num = max(xor_sum[i - 1][j - 1] , xor_sum[i - 1][j]);
    			xor_sum[i][j] = max(xor_sum[i][j] , xor_num);
    		}
    	}
    }
    void check_them() {
    	scanf("%d",&m);
    	for(int i = 1 ; i <= m ; i++) {
    		int l,r;
    		scanf("%d%d",&l,&r);
    		int ans = xor_sum[r - l + 1][r];
    		printf("%d
    ",ans);
    	}
    }
    
    int main() {
    	freopen("function.in","r",stdin);
    	freopen("function.out","w",stdout);
    	scanf("%d",&n);
    	for(int i = 1 ; i <= n ; i++) {
    		scanf("%d",&a[i]);
    		xor_sum[1][i] = a[i];
    	}
    	work_first();//预处理
    	check_them();//查询
    	return 0;
    }
    
    
  • 相关阅读:
    增强iOS应用程序性能的提示和技巧(25个)
    [iOS]用instancetype代替id作返回类型有什么好处?
    把cygwin加入右键菜单
    NSRange
    Centos7下安装MySQL
    (转)php 操作redis全部方法。
    unbuntu 安装php5.6
    unbuntu 安装nginx
    unbuntu 安装MySQL
    Ubuntu16.04下实现MySQL主从复制
  • 原文地址:https://www.cnblogs.com/Repulser/p/9601008.html
Copyright © 2011-2022 走看看