报错:Nothing is compiled: OUTPUT exceeds.
#include<bits/stdc++.h>
using namespace std;
long long n, m, q;
struct Node {
long long left = 0;
long long right = 0;
long long num = 0;
long long add = 0;
long long mul = 1;
};
Node tree[1000010];
long long a[100010];
void build(int left, int right, int id)
{
int mid = (left + right) / 2;
tree[id].left = left;
tree[id].right = right;
tree[id].add = 0;
if(left == right)
{
tree[id].num = a[left] % m;
return;
}
build(left, mid, id * 2);
build(mid + 1, right, id * 2 + 1);
tree[id].num = tree[id * 2].num + tree[id * 2 + 1].num;
tree[id].num %= m;
}
void pushdown(int id)
{
if(tree[id].add > 0)
{
tree[id * 2].num = tree[id * 2].num * tree[id].mul + (tree[id * 2].right - tree[id * 2].left + 1) * tree[id].add;
tree[id * 2].num %= m;
tree[id * 2 + 1].num = tree[id * 2 + 1].num * tree[id].mul + (tree[id * 2 + 1].right - tree[id * 2 + 1].left + 1) * tree[id].add;
tree[id * 2 + 1].num %= m;
tree[id * 2].mul *= tree[id].mul;
tree[id * 2 + 1].mul *= tree[id].mul;
tree[id * 2].add += tree[id].add;
tree[id * 2 + 1].add += tree[id].add;
tree[id].add = 0;
tree[id].mul = 0;
}
}
void edit(int id, int left, int right, long long add, long long mul)
{
if(left <= tree[id].left && tree[id].right <= right)
{
tree[id].add += add;
tree[id].mul *= mul;
tree[id].num = tree[id].num * mul + (tree[id].right - tree[id].left + 1) * add;
return;
}
pushdown(id);
if(left <= tree[id * 2].right) edit(id * 2, left, right, add, mul);
if(right >= tree[id * 2 + 1].left) edit(id * 2 + 1, left, right, add, mul);
tree[id].num = tree[id * 2].num + tree[id * 2 + 1].num;
}
long long sum(int left, int right, int id)
{
if(tree[id].left >= left && tree[id].right <= right)
{
return tree[id].num % m;
}
else
{
pushdown(id);
long long s = 0;
if(left <= tree[id * 2].right)
{
s += sum(left, right, id * 2);
}
s %= m;
if(right >= tree[id * 2 + 1].left)
{
s += sum(left, right, id * 2 + 1);
}
return s %= m;
}
}
int main()
{
cin >> n >> q >> m;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
}
build(1, n, 1);
for(int i = 0;i < q;i++)
{
int op;
cin >> op;
if(op == 2)
{
long long x, y, k;
cin >> x >> y >> k;
edit(1, x, y, k, 1);
}
else if(op == 1)
{
long long x, y, k;
cin >> x >> y >> k;
edit(1, x, y, 0, k);
}
else
{
int x, y;
cin >> x >> y;
cout << sum(x, y, 1) % m << endl;
}
}
return 0;
}