CF 365 div2 D
http://codeforces.com/contest/703/problem/D
题目大意:给你一个长度为n数组,有q个询问,每次询问一个区间[l,r],这个区间的val就是所有数值为偶数个的数的亦或值。
思路:先求出所有区间的亦或和的val,然后利用树状数组离线维护,然后用所有区间^树状数组的亦或区间就是我们所要求的区间。
原因,因为树状数组维护的区间里面保存的是奇的,所以亦或以后就是偶的了
//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
const int maxn = 1e6 + ;
vector<pair<int, int> > v[maxn];
map<int, int> m;
int a[maxn], sum[maxn], tree[maxn], ans[maxn];
int n, q;
inline int lowbit(int i) {return i & -i;} void add(int pos, int val){
for (int i = pos; i <= n; i += lowbit(i)){
tree[i] ^= val;
}
} inline int cal(int pos){
int res = ;
for (int i = pos; i >= ; i -= lowbit(i)) res ^= tree[i];
return res;
} int main(){
scanf("%d", &n);
for (int i = ; i <= n; i++){
scanf("%d", a + i); sum[i] = sum[i - ] ^ a[i];
}
scanf("%d", &q);
for (int i = ; i <= q; i++){
int l, r; scanf("%d%d", &l, &r);
v[r].pb(mk(l, i));
}
int cnt = ;
for (int i = ; i <= n; i++){
if (m[a[i]]) add(m[a[i]], a[i]);
add(i, a[i]);
m[a[i]] = i;
int len = v[i].size();
for (int j = ; j < len; j++){
pair<int, int> p = v[i][j];
int res = sum[i] ^ sum[p.first - ];
///printf("i = %d\n", i);
int tmp = cal(i) ^ cal(p.first - );
ans[p.second] = res ^ tmp;
if (p.first == && p.second == ) continue;
cnt++;
if (cnt == q) break;
}
}
for (int i = ; i <= q; i++) printf("%d\n", ans[i]);
return ;
}
复杂度O(n*log)
CF 365 div2 D的更多相关文章
- CF #365 DIV2 D Mishka and Interesting sum 区间异或+线段树
D. Mishka and Interesting sum time limit per test 3.5 seconds memory limit per test 256 megabytes in ...
- TTTTTTTTTTTTT CF#365 div2 B 统计点
B. Mishka and trip time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组
题目链接:CF #365 (Div. 2) D - Mishka and Interesting sum 题意:给出n个数和m个询问,(1 ≤ n, m ≤ 1 000 000) ,问在每个区间里所有 ...
- CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)
转载自:http://www.cnblogs.com/icode-girl/p/5744409.html 题目链接:CF #365 (Div. 2) D - Mishka and Interestin ...
- cf 442 div2 F. Ann and Books(莫队算法)
cf 442 div2 F. Ann and Books(莫队算法) 题意: \(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\) 每次查询区间\([l,r]内有多少对(i, ...
- CF#603 Div2
差不多半年没打cf,还是一样的菜:不过也没什么,当时是激情,现在已是兴趣了,开心就好. A Sweet Problem 思维,公式推一下过了 B PIN Codes 队友字符串取余过了,结果今天早上一 ...
- CF R631 div2 1330 E Drazil Likes Heap
LINK:Drazil Likes Heap 那天打CF的时候 开场A读不懂题 B码了30min才过(当时我怀疑B我写的过于繁琐了. C比B简单多了 随便yy了一个构造发现是对的.D也超级简单 dp了 ...
- CF#581 (div2)题解
CF#581 题解 A BowWow and the Timetable 如果不是4幂次方直接看位数除以二向上取整,否则再减一 #include<iostream> #include< ...
- [CF#286 Div2 D]Mr. Kitayuta's Technology(结论题)
题目:http://codeforces.com/contest/505/problem/D 题目大意:就是给你一个n个点的图,然后你要在图中加入尽量少的有向边,满足所有要求(x,y),即从x可以走到 ...
随机推荐
- postgreSqL的序列sequence
PostgreSQL uses sequences to generate values for serial columns and serial columns are generally wha ...
- PHP实现中文截取无乱码
字符串的处理是编程中比较常见的,各种编程语言对字符串的处理也提供了大量函数,像php中mb_substr()函数可以实现对中文字符串的截取,如何使用自定义方法实现中文字符串截取无乱码这也是面试经常遇到 ...
- freemarker遍历list中的map
前台: <select id="jq" name="jq" class="tsui" data-required="true ...
- 复习TextView(查漏补缺)
android:drawableLeft="@drawable/ic_launcher"----设置图片居左 android:paddingLeft="20dp" ...
- Git撤销暂存区stage中的内容
$ git add readme.txt提交到了stage中. $ git statusOn branch masterChanges to be committed: (use "git ...
- 这一招让 Word 帮你自动生成文件目录,也能自动更新
学生的研究报告或是公司员工的提案企划书,为了务求严明详尽,往往是洋洋洒洒数十页或甚至上百页之多,像这样大篇幅的文件,在结构上通常会划分为好几个部分,比如像论文就会区分为封面.摘要.内文章节.参考文献等 ...
- 在vim中使用perltidy美化perl代码
来源: http://www.cnblogs.com/itech/archive/2013/02/18/2915279.html 格式优美的perl代码不但让人赏心悦目,而且可以方便阅读. perlt ...
- Inno Setup入门(十八)——Inno Setup类参考(4)
分类: Install Setup 2013-02-02 11:29 406人阅读 评论(0) 收藏 举报 编辑框 编辑框也叫文本框,是典型的窗口可视化组件,既可以用来输入文本,也可以用来显示文本,是 ...
- 用GDB调试程序的设置 Segmentation fault(Core Dump)调试
在写wifi库的时候碰见一个 Segmentation fault(Core Dump) 所以需要用GDB调试下. 在cmake的时候,修改CMakeLists.txt set(CMAKE_C_FLA ...
- Java学习笔记之自定义异常
1.自定义异常类: /** * 自定义异常,只要继承继承Exception类或其子类即可 * @author Administrator * */ public class FileException ...