-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path198D.cpp
113 lines (104 loc) · 2.01 KB
/
198D.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#include <set>
#include <iostream>
#include <functional>
#include <utility>
#include <deque>
#include <ctime>
#include <sstream>
#include <cassert>
#include <fstream>
#include <cstring>
#include <numeric>
#include <ctype.h>
#define MOD 1000000007
#define exit return 0
#define N 1555
#define inf 1000000000000000000LL
typedef long long ll;
#define exit return 0
#define PS system("pause")
#define S 100007
#define mx(a,b) a>b?a:b
#define R0(i,n) for (i = 0; i < n; i++)
#define R1(i,n) for (i = 1; i <= n; i++)
#define MS(a,x) memset(x, a, sizeof(x));
#define left v<<1
#define right left|1
#define SZ(x) ((int)x.size())
const double eps = 1e-10;
using namespace std;
int _maxx, _maxy;
int n, i, j, k, l, m, a, b;
bool gr[20][20], H[20][20];
int low[1 << 20]; ll dp[1 << 20][20];
int mask;
ll tree[1200][1200][4];
int indX(int x, int y){
int pas = 0;
if (!(x & 1))pas += 1;
if (!(y & 1))pas += 2;
return pas;
}
void up2D(int x, int y, ll val){
int y1;
int goes = indX(x, y);
while (x <= n){
y1 = y;
while (y1 <= n){
tree[x][y1][goes] ^= val;
y1 += (y1&-y1);
}
x += (x&-x);
}
}
ll get(int x, int y){
ll sum = 0;
int goes = indX(x, y);
while (x){
int y1 = y;
while (y1){
sum ^= tree[x][y1][goes];
y1 -= (y1&-y1);
}
x -= (x&-x);
}
return sum;
}
ll getans(int x1, int y1, int x2, int y2){
ll pas = get(x2, y2);
pas ^= get(x2, y1 - 1); pas ^= get(x1 - 1, y2); pas ^= get(x1 - 1, y1 - 1);
return pas;
}
ll pas;
int main(){
scanf("%d %d", &n, &m);
while (m--){
scanf("%d", &a);
int x1, y1, x2, y2;
if (a == 1){
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
ll pas = getans(x1, y1, x2, y2);
printf("%I64d\n", pas);
}
else{
ll add;
scanf("%d %d %d %d %I64d", &x1, &y1, &x2, &y2, &add);
up2D(x1, y1, add);
up2D(x1, y2 + 1, add);
up2D(x2 + 1, y1, add);
up2D(x2 + 1, y2 + 1, add);
}
}
exit;
PS;
}