希望更丰富的展现?[使用Markdown](https://www.luogu.org/wiki/show?name=%E5%B8%AE%E5%8A%A9%EF%BC%9Amarkdown)
by pmt2018 @ 2019-06-02 15:41:55
@[zhanglinbo1](/space/show?uid=134663)
这让我们怎么看啊qwq
by Jelly_Goat @ 2019-06-02 15:46:41
希望更丰富的展现?请使用Markdown
by 陆小果 @ 2019-06-02 15:49:50
我...还是帮你改格式了吧
记得下次在代码上下加上箭头中间的东西
```markdown
-->```cpp<--
你的代码
-->```<--
```
最后放上你的代码
```cpp
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long int lli;
int n, m;
lli a[100010];
const int maxn = 100010;
struct segtreenode
{
lli val, lazytag;
};
segtreenode segtree[4 * maxn];
void build(lli rt, lli al, lli ar)
{
segtree[rt].lazytag = 0;
if (al == ar)
{
segtree[rt].val = a[al];
return;
}
lli m = (al + ar) / 2;
build(rt2, al, m);
build(rt2 + 1, m + 1, ar);
segtree[rt].val = segtree[rt2].val + segtree[rt2 + 1].val;
} //建树
void pushdown(lli rt, lli al, lli ar)
{
lli m = (al + ar) / 2;
if (segtree[rt].lazytag != 0)
{
segtree[rt2].val += segtree[rt].lazytag(m - al + 1);
segtree[rt2 + 1].val += segtree[rt].lazytag(ar - m + 1 + 1);
segtree[rt2].lazytag += segtree[rt].lazytag;
segtree[rt2 + 1].lazytag += segtree[rt].lazytag;
segtree[rt].lazytag = 0;
}
}
void updata(lli rt, lli al, lli ar, lli ql, lli qr, lli val)
{
if (al > qr || ar < ql)
return;
if (al >= ql && ar <= qr)
{
segtree[rt].val += (val(ar - al + 1));
segtree[rt].lazytag += val;
return;
}
pushdown(rt, al, ar);
lli m = (al + ar) / 2;
updata(rt2, al, m, ql, qr, val);
updata(rt2 + 1, m + 1, ar, ql, qr, val);
segtree[rt].val = segtree[rt2].val + segtree[rt2 + 1].val;
return; //增加一个值
}
lli ans = 0;
lli query(lli rt, lli al, lli ar, lli ql, lli qr) //查询
{
if (al > qr || ar < ql)
return 0;
if (al >= ql && ar <= qr)
{
return segtree[rt].val;
}
pushdown(rt, al, ar);
lli m = (al + ar) / 2;
return query(rt2, al, m, ql, qr) + query(rt2 + 1, m + 1, ar, ql, qr);
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i)
{
scanf("%lld", &a[i]);
}
build(1, 1, n);
for (int i = 1; i <= m; ++i)
{
int num;
scanf("%d", &num);
if (num == 1)
{
lli ql, qr, val;
scanf("%lld%lld%lld", &ql, &qr, &val);
updata(1, 1, n, ql, qr, val);
;
}
if (num == 2)
{
ans = 0;
lli ql, qr;
scanf("%lld%lld", &ql, &qr);
ans = query(1, 1, n, ql, qr);
printf("%lld\n", ans);
}
}
return 0;
}
```
by Jelly_Goat @ 2019-06-02 15:50:41
```cpp
#include<iostream>
#include<cstring>
#include<algorithm>
#include<stdio.h>
#define MAXN 500000
using namespace std;
struct node{
long long sum,lazy;
long long left,right;
}tree[MAXN];
long long a[MAXN];
void buildtree(long long id,long long l,long long r){
tree[id].left=l;
tree[id].right=r;
tree[id].lazy=0;
if(l==r){
tree[id].sum=a[l];
return;
}
long long mid=(l+r)>>1;
buildtree(id<<1,l,mid);
buildtree(id<<1|1,mid+1,r);
tree[id].sum=tree[id<<1].sum+tree[id<<1].lazy*(tree[id<<1].right-tree[id<<1].left+1)+
tree[id<<1|1].sum+tree[id<<1|1].lazy*(tree[id<<1|1].right-tree[id<<1|1].left+1);
}
void change(long long id,long long l,long long r,long long c){
if(tree[id].left==l&&tree[id].right==r){
tree[id].lazy+=c;
return;
}
if(tree[id].lazy){
tree[id<<1].lazy+=tree[id].lazy;
tree[id<<1|1].lazy+=tree[id].lazy;
tree[id].lazy=0;
}
if(tree[id<<1].right>=r){
change(id<<1,l,r,c);
}
else if(tree[id<<1|1].left<=l){
change(id<<1|1,l,r,c);
}
else{
change(id<<1,l,tree[id<<1].right,c);
change(id<<1|1,tree[id<<1|1].left,r,c);
}
tree[id].sum=tree[id<<1].sum+tree[id<<1].lazy*(tree[id<<1].right-tree[id<<1].left+1)+
tree[id<<1|1].sum+tree[id<<1|1].lazy*(tree[id<<1|1].right-tree[id<<1|1].left+1);
return;
}
long long query(long long id,long long l,long long r){
if(tree[id].left==l&&tree[id].right==r){
return tree[id].sum+tree[id].lazy*(tree[id].right-tree[id].left+1);
}
if(tree[id].lazy){
tree[id<<1].lazy+=tree[id].lazy;
tree[id<<1|1].lazy+=tree[id].lazy;
tree[id].sum+=tree[id].lazy*(tree[id].right-tree[id].left+1);
tree[id].lazy=0;
}
if(tree[id<<1].right>=r){
return query(id<<1,l,r);
}
else if(tree[id<<1|1].left<=l){
return query(id<<1|1,l,r);
}
else{
return query(id<<1,l,tree[id<<1].right)+
query(id<<1|1,tree[id<<1|1].left,r);
}
}
int main()
{
long long n,m,p,x,y,z;
scanf("%lld %lld",&n,&m);
for(int i=1;i<=n;i++){
cin>>a[i];
}
buildtree(1,1,n);
for(long long i=1;i<=m;i++){
scanf("%d",&p);
if(p==2) {
scanf("%lld%lld",&x,&y);
printf("%lld\n",query(1,x,y));
}
else{
scanf("%lld%lld%lld",&x,&y,&z);
change(1,x,y,z);
}
}
return 0;
}
```
本蒟蒻的代码,好奇尾山漠很多人都卡死在这题上了~~
by charliegong @ 2019-06-02 15:55:21
@[Jelly_Goat](/space/show?uid=122927)
谢谢,这是我第一次发代码。
麻烦再帮我看一下那里错了吧。
by zhanglinbo1 @ 2019-06-02 16:00:07
@[zhanglinbo1](/space/show?uid=134663)
抱歉暂时有点忙碌
by Jelly_Goat @ 2019-06-02 16:02:42
@[zhanglinbo1](/space/show?uid=134663)
by charliegong @ 2019-06-02 16:06:44