```
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
include [HTML_REMOVED]
using namespace std;
// #define int long long
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const long long LLINF = 4e18 + 5;
typedef long long LL;
typedef pair[HTML_REMOVED] PII;
define xx first
define yy second
define endl ‘\n’
void ClearFloat()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
int read()
{
int ret = 0, f = 1;
char ch = getchar();
while (‘0’ > ch || ch > ‘9’)
{
if (ch == ‘-‘)
f = -1;
ch = getchar();
}
while (‘0’ <= ch && ch <= ‘9’)
{
ret = ret * 10 + ch - ‘0’;
ch = getchar();
}
return ret * f;
}
struct node
{
int l, r;LL sum; int lazy;
} tr[32][N << 2];
int n;
int a[N];
int m;
void push_up(int id, int u)
{
tr[id][u].sum = tr[id][u << 1].sum + tr[id][u << 1 | 1].sum;
}
void build(int id, int u, int l, int r)
{
if (l == r)
{
tr[id][u] = {l, r, a[l] >> id & 1, 0};
return;
}
tr[id][u] = {l, r, 0, 0};
int mid = l + r >> 1;
build(id, u << 1, l, mid);
build(id, u << 1 | 1, mid + 1, r);
push_up(id, u);
}
void get(int id, int u)
{
tr[id][u].lazy ^= 1;
tr[id][u].sum = tr[id][u].r - tr[id][u].l + 1 - tr[id][u].sum;
}
void push_down(int id, int u)
{
if (tr[id][u].lazy)
{
get(id, u << 1);
get(id, u << 1 | 1);
tr[id][u].lazy = 0;
}
}
void change(int id, int u, int l, int r)
{
if (tr[id][u].l >= l && r >= tr[id][u].r)
{
get(id, u);
return;
}
push_down(id, u);
int mid = tr[id][u].l + tr[id][u].r >> 1;
if (l <= mid)
change(id, u << 1, l, r);
if (r > mid)
change(id, u << 1 | 1, l, r);
push_up(id, u);
}
int query(int id, int u, int l, int r)
{
if (tr[id][u].l >= l && r >= tr[id][u].r)
{
return tr[id][u].sum;
}
push_down(id, u);
LL ans = 0;
int mid = tr[id][u].l + tr[id][u].r>> 1;
if (l <= mid)
ans += query(id, u << 1, l, r);
if (r > mid)
ans += query(id, u << 1 | 1, l, r);
return ans;
}
int op, x, k, l, r, e;
signed main()
{
ClearFloat();
cin >> n;
for (int i = 1; i <= n; i)
{
cin >> a[i];
}
for (int i = 0; i < 30; i)
build(i, 1, 1, n);
cin >> m;
for (int i = 1; i <= m; i++)
{
cin >> op;
if (op == 1)
{
cin >> l >> r;
LL ans = 0;
for (int j = 0; j < 30; j++)
{
ans += (1LL << j) * query(j, 1, l, r);
}
cout << ans << endl;
}
else
{
cin >> l >> r >> x;
for (int j = 0; j < 30; j++)
{
if (x >> j & 1)
change(j, 1, l, r);
}
}
}
}```
MarkDown 炸了