**题意:**给出一串序列,求区间连续异或值的最大和最小。
**思路:**如果不是出在专题里,想不到可以用字典树做。先求前缀异或值,转为二进制,加入Trie树中,如果要求最大,就是尽可能走和当前位数字相反的,这样异或值才能保持最大,最小,就尽可能走和当前位数字相同的,走到尽头异或前缀值。

/** @Date    : 2016-11-10-16.34

* @Author : Lweleth (SoungEarlf@gmail.com)

* @Link : https://github.com/

* @Version :

*/

#include <stdio.h>

#include <iostream>

#include <string.h>

#include <algorithm>

#include <utility>

#include <vector>

#include <map>

#include <set>

#include <string>

#include <stack>

#include <queue>

#define LL long long

#define MMF(x) memset((x),0,sizeof(x))

#define MMI(x) memset((x), INF, sizeof(x))

using namespace std;



const int INF = 0x3f3f3f3f;

const int N = 5e4+20;



struct yuu

{

int cnt;

int val[35*N];//前缀和值

int nxp[35*N][2];



int init()

{

MMF(nxp[0]);

MMF(val);

cnt = 1;

}



int idx(char c)

{

return c - '0';

}



int insert(char *s, int v)//

{

int u = 0;

int x = strlen(s);

for(int i = 0; i < x; i++)

{

int c = idx(s[i]);

if(nxp[u][c] == 0)

{

MMF(nxp[cnt]);

nxp[u][c] = cnt;

cnt++;

}

u = nxp[u][c];

}

val[u] = v;

}



int find(char *s, int a, int ma)//ma 代表 是否找相反的

{

int u = 0;

int x = strlen(s);



for(int i = 0; i < x; i++)

{

int c = idx(s[i]);

int v = c ^ ma;

if(nxp[u][v] == 0)

{

v ^= 1;

}

u = nxp[u][v];

}

return val[u] ^ a;//尽头赋值

}

}tt;



void atoi_(char *s, int x)

{

for(int i = 31; i >= 0; i--)

{

s[i] = ((x >> i) & 1) + '0';

}

s[32] = '\0';

reverse(s, s + 32);

// for(int i = 0; i <= 32; i++)

// cout << s[i] ;

// cout << endl;

}



int a[N];

int sum[N];

char t[35];



int main()

{

int T;

int cnt = 0;

cin >> T;

while(T--)

{

int n;

scanf("%d", &n);

sum[0] = 0;

for(int i = 1; i <= n; i++)

{

scanf("%d", a + i);

sum[i] = sum[i-1] ^ a[i];

}

tt.init();

atoi_(t, 0);

tt.insert(t, 0);



int ma = -INF;

int mi = INF;

for(int i = 1; i <= n; i++)

{

atoi_(t, sum[i]);

ma = max(ma, tt.find(t, sum[i], 1));

mi = min(mi, tt.find(t, sum[i], 0));

tt.insert(t, sum[i]);

}

printf("Case %d: %d %d\n", ++cnt, ma, mi);

}

return 0;

}

LightOJ 1269 - Consecutive Sum Trie树的更多相关文章

  1. LightOJ 1269 Consecutive Sum (Trie树)

    Jan's LightOJ :: Problem 1269 - Consecutive Sum 题意是,求给定序列的中,子序列最大最小的抑或和. 做法就是用一棵Trie树,记录数的每一位是0还是1.查 ...

  2. 1269 - Consecutive Sum

    1269 - Consecutive Sum    PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 64 MB ...

  3. LightOJ 1129 - Consistency Checker Trie树模板

    题意:给出n条串判断是否存在一个串为另一个串的前缀. 思路:套Trie树的模板,先全部插入,再查找每个字串,如果查找字串完毕,但还存在下一个节点,说明存在前缀. /** @Date : 2016-11 ...

  4. hdu 4825 Xor Sum trie树

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Proble ...

  5. HDU4825 Xor Sum —— Trie树

    题目链接:https://vjudge.net/problem/HDU-4825 Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Li ...

  6. Consecutive Sum LightOJ - 1269(区间异或和)

    Consecutive Sum 又来水一发blog... 本来是昨天补codechef的题,最后一道题是可持久化字典树,然后去黄学长博客看了看 觉得字典树写法有点不太一样,就想着用黄学长的板子写码几道 ...

  7. HDU 4825 Xor Sum (trie树处理异或)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total S ...

  8. CodeForces979D:Kuro and GCD and XOR and SUM(Trie树&指针&Xor)

    Kuro is currently playing an educational game about numbers. The game focuses on the greatest common ...

  9. HDU4825 Xor Sum(贪心+Trie树)

    Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeu ...

随机推荐

  1. HDU 1007 Quoit Design(计算几何の最近点对)

    Problem Description Have you ever played quoit in a playground? Quoit is a game in which flat rings ...

  2. 4-2:实现cp命令

    #include <stdio.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h& ...

  3. Coins and Queries(map迭代器+贪心)

    题意 n个硬币,q次询问.第二行给你n个硬币的面值(保证都是2的次幂!).每次询问组成b块钱,最少需要多少个硬币? Example Input 5 42 4 8 2 4851410 Output 1- ...

  4. iOS- UIPickerView餐厅点餐系统

    在餐厅里的点餐系统的核心控件就是UIPickerView 今天晚上在整理以前的项目笔记时,特意把UIPickerView单独拿出来,做了一个简陋的点餐道具. 因为没有素材图片,所有大家将就看看吧 0. ...

  5. 访问方式由http改为https curl:(51)

    系统访问由http变为https,先申请了CA证书,然后win下浏览器访问时没问题的,但是linux下通过curl的方式访问就报错: curl:(51) SSLcertificate subject ...

  6. 异步请求Python库 grequests的应用和与requests库的响应速度的比较

    requests库是python一个优秀的HTTP库,使用它可以非常简单地执行HTTP的各种操作,例如GET.POST等.不过,这个库所执行的网络请求都是同步了,即cpu发出请求指令后,IO执行发送和 ...

  7. asp.net MVC 导出查询结果到Excel

    首先在View视图中有一表单form,导出按钮<input class="btn export" type="button" value="导出 ...

  8. Java语言有哪些特点?

    1)简单 如果同学们学过C++语言,就会感觉Java眼熟,因为Java中许多基本语句的语法和C++是一样的,像常用的循环语句.控制语句等和C++几乎相同.需要注意的是,Java和C++时两种完全不同的 ...

  9. Go语言【第六篇】:Go循环语句

    Go语言循环语句 在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句,以下为大多数编程语言循环程序的流程如: Go语言提供了以下几种类型循环处理语句: 循环类型 描述 fo ...

  10. 【POJ2728】Desert King(分数规划)

    [POJ2728]Desert King(分数规划) 题面 vjudge 翻译: 有\(n\)个点,每个点有一个坐标和高度 两点之间的费用是高度之差的绝对值 两点之间的距离就是欧几里得距离 求一棵生成 ...