贴上我的代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
#include <algorithm>
#define int long long int
using namespace std;
const int N = 1e7 + 100;
int n, m, idx[N], d2[N], id2i[N], a[N];
int lowbit(int x)
{
return x & -x;
}
void add(int x, int w)
{
for (int i = x; i <= n; i += lowbit(i))
{
d2[i] += w;
id2i[i] += (x - 1) * w;
}
}
int get_sum(int x)
{
int res = 0;
for (int i = x; i >= 1; i -= lowbit(i))
{
res += x * d2[i] - id2i[i];
}
return res;
}
signed main()
{
//cin >> n >> m;
scanf("%lld%lld", &n, &m);
while (m--)
{
int l, r, k, d, s, e;
scanf("%lld%lld%lld%lld", &l, &r, &s, &e);
//cin >> l >> r >> s >> e;
k = s;
d = (e - s) / (r - l);
add(l, k);
add(l + 1, d - k);
add(r + 1, -(k + (r - l) * d + d));
add(r + 2, ((r - l) * d) + k);
}
int maxx = -1, ans = get_sum(1), x = get_sum(1);
for (int i = 2; i <= n; i++)
{
x = get_sum(i);
ans ^= x;
maxx = max(maxx, x);
}
cout << ans << ' ' << maxx << '\n';
return 0;
}
最慢的点400多ms