Codeforces D. Iahub and Xors

题目大意:给定一个N*N的区间,1:对(x0,y0,x1,y1)每个直 都xor v;

2: 求(x0,y0,x1,y1)区间的 sum xor;

http://codeforces.com/blog/entry/8755    

算得上经典题:

 1 #include<stdio.h>
 2 #include<algorithm>
 3 #include<math.h>
 4 #include<vector>
 5 #include<string.h>
 6 #include<string>
 7 #include<set>
 8 #include<map>
 9 #include<iostream>
10 #include<set>
11
12 using namespace std;
13 typedef long long ll;
14 int n;
15
16 ll c[2][2][1003][1003];
17
18 ll query(int x,int y)
19 {
20  ll ret=0;
21  for (int i=x;i>0;i-=i&-i)
22  for (int j=y;j>0;j-=j&-j)
23  ret^=c[x&1][y&1][i][j];
24  return ret;
25 }
26
27 void update(int x,int y,ll v)
28 {
29    for (int i=x;i<=n;i+=i&-i)
30    for (int j=y;j<=n;j+=j&-j)
31    c[x&1][y&1][i][j]^=v;
32 }
33
34 int main()
35 {
36    int m,x,y,xx,yy,op;
37    ll v;
38    scanf("%d%d",&n,&m);
39    while (m--)
40    {
41      scanf("%d%d%d%d%d",&op,&x,&y,&xx,&yy);
42      if (op==1)
43      {
44        x--;
45        y--;
46        printf("%I64d\n",query(x,y)^query(x,yy)^query(xx,y)^query(xx,yy));
47      }
48      else
49      {
50         scanf("%I64d",&v);
51         xx++;
52         yy++;
53         update(x,y,v);
54         update(xx,yy,v);
55         update(x,yy,v);
56         update(xx,y,v);
57      }
58    }
59    return 0;
60 }
时间: 2024-10-25 02:22:34

Codeforces D. Iahub and Xors的相关文章

Codeforces Round #198 (Div. 1) D. Iahub and Xors 二维树状数组*

D. Iahub and Xors Iahub does not like background stories, so he'll tell you exactly what this problem asks you for. You are given a matrix a with n rows and n columns. Initially, all values of the matrix are zeros. Both rows and columns are 1-based,

Iahub and Xors Codeforces - 341D

二维线段树被卡M+T...于是去学二维树状数组区间更新区间查询 树状数组维护数列区间xor的修改.删除(就是把原问题改成一维): 以下p*i实际都指i个p相xor,即(i&1)*pa表示原数列d[i]表示a[i]^a[i-1],e[i]=d[i]*igetd(x)和gete(x)分别表示对d/e求前x个元素的前缀xor用树状数组维护e[i]和d[i]的前缀xor区间更新[l,r],x:d[l]^=x,d[r+1]^=x,e[l]^=l*x,e[r+1]^=(r+1)*x区间查询a[x]的前缀xo

codeforces 340E Iahub and Permutations(错排or容斥)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Iahub and Permutations Iahub is so happy about inventing bubble sort graphs that he's staying all day long at the office and writing permutations. Iahubina is angry that she is no more import

CodeForces 340E Iahub and Permutations 错排dp

Iahub and Permutations 题解: 令 cnt1 为可以没有限制位的填充数字个数. 令 cnt2 为有限制位的填充数字个数. 那么:对于cnt1来说, 他的值是cnt1! 然后我们对cnt2进行dp. 对于任意一个新加进来的数字,我们可以令一个一个没有限制位数放在这里, 那么新加进来的数字 ≍ 没有限制位, 他的方案为 i-1 * dp[i-1] , 然后我们如果把这个数字放到有限制位的数来说, 那么他的转移方程就和错排一样了. 代码: #include<bits/stdc++

CodeForces 340E Iahub and Permutations

容斥原理,组合数. 找出有$cnt$个数字还有没放,那么总方案数就是$cnt!$. 总方案数里面包含了正确的和非正确的,我们需要将非正确的删去. 先删去$1$个数字$a[i]=i$的情况,发现会多删,要加回两个数字$a[i]=i$的情况,发现会多加......就是一个容斥原理的过程. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring>

Codeforces 620F Xors on Segments(暴力+DP)

题目链接 Xors on Segments 预处理出x[i] = 1 ^ 2 ^ 3 ^ -- ^ i; (话说这题O(N^2居然能过)) 先对询问离线. 然后dp[i]表示以a[i]为开头的所有连续序列中最大答案. 然后依次处理到a[j]的时候如果以j为右端点的询问的左端点小于等于i则更新. 复杂度O(N^2) 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define rep(i, a, b) for (int i(a);

Codeforces 620F Xors on Segments 回滚莫队 + 字典树 || 离心询问分治 + 可持久化字典树

Xors on Segments 转换一下变成询问区间选两个数异或的最大值, 要注意的是一个数作为左端点要-1, 所以在回滚莫队的时候用两棵字典树维护. 这个题居然n ^ 2 也能过...  其实用分治 + 可持久化字典树可以做到n * log(n) * log(n), 懒得写了... #include<bits/stdc++.h> #define LL long long #define LD long double #define ull unsigned long long #defin

codeforces 620F. Xors on Segments

题目链接 定义一种操作f(u, v) = u^u+1^.......^v. (u<=v), 给n个数, q个询问, 每个询问给出一个区间[l, r], 求这个区间里的f(a[i], a[j]) (l<=i<=j<=r)的最大值. 一开始竟然用n^2m的方法, 真是有点脑残.. #include <iostream> #include <vector> #include <cstdio> #include <cstring> #incl

CodeForces 383C Propagating tree

Propagating tree Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Original ID: 383C64-bit integer IO format: %I64d      Java class name: (Any) Iahub likes trees very much. Recently he discovered an interesting tree