理解分析:链接
#include
using namespace std;
typedef long long ll;
int n,m, a, b, x, y,p, ans;
struct node{
int l, r, w, f;
}tree[400005];
void Build(int k,int ll,int rr) { //建树
tree[k].l = ll, tree[k].r = rr;
if (tree[k].r == tree[k].l) {
scanf("%d", &tree[k].w);
return;
}
int mid = (ll + rr) / 2;
Build(k * 2, ll, mid);
Build(k * 2 + 1, mid + 1, rr);
tree[k].w = tree[k * 2].w + tree[k * 2 + 1].w;
}
void Down(int k) { //标记下传
tree[k * 2].f += tree[k].f;
tree[k * 2 + 1].f += tree[k].f;
tree[k * 2].w += tree[k].f*(tree[k * 2].r - tree[k * 2].l + 1);
tree[k * 2+1].w += tree[k].f*(tree[k * 2+1].r - tree[k * 2+1].l + 1);
tree[k].f = 0;
}
void Ask_Point(int k) { //单点查询
if (tree[k].r == tree[k].l) {
ans = tree[k].w;
return;
}
if (tree[k].f)Down(k);
int mid = (tree[k].l + tree[k].r) / 2;
if (x <= mid)Ask_Point(k * 2);
else Ask_Point(k * 2 + 1);
}
void Change_Point(int k) { //单点修改
if (tree[k].r == tree[k].l) {
tree[k].w += y;
return;
}
if (tree[k].f)Down(k);
int mid = (tree[k].l + tree[k].r) / 2;
if (x <= mid)Change_Point(k * 2);
else Change_Point(k * 2 + 1);
tree[k].w = tree[k * 2].w + tree[k * 2 + 1].w;
}
void Ask_Interval(int k) { //区间查询
if (tree[k].l >= a && tree[k].r <= b) {
ans += tree[k].w;
return;
}
if (tree[k].f)Down(k);
int mid = (tree[k].r + tree[k].l) / 2;
if (a <= mid)Ask_Interval(k * 2);
if (b > mid)Ask_Interval(k * 2 + 1);
}
void Change_Interval(int k) {
if (tree[k].l >= a && tree[k].r <= b) {
tree[k].w += (tree[k].r-tree[k].l+1)*y;
tree[k].f+=y; //注意不要遗漏!!!
return;
}
if (tree[k].f)Down(k);
int mid = (tree[k].r + tree[k].l) / 2;
if (a <= mid)Change_Interval(k * 2);
if (b > mid)Change_Interval(k * 2 + 1);
tree[k].w = tree[k * 2].w + tree[k * 2 + 1].w;
}
int main() {
scanf("%d%d", &n,&m);
Build(1, 1, n);
for (int i = 1; i <= m; i++)
{
scanf("%d", &p);
ans = 0;
if(p == 1) {
scanf("%d", &x);
Ask_Point(1);
printf("%d\n",ans);
}
else if (p == 2) {
scanf("%d%d", &x,&y);
Change_Point(1);
}
else if (p == 3) {
scanf("%d%d", &a, &b);
Ask_Interval(1);
printf("%d\n", ans);
}
else {
scanf("%d%d%d", &a, &b, &y);
Change_Interval(1);
}
}
return 0;
}
阿里云建站—为企业提供互联网“快”服务
2020年因为一场突如其来的疫情,不少企业受到了严重冲击,疫情的冲击力对传统“纯线
下”行业的危害最大,互联网女皇玛丽·米克(MaryMeeker)4月17日发布了著名的年度互
联网趋势报告,报告中指出:拥有强大的互联网线上线下融合能力的企业在疫情中的表现最好,
线上线下融合的趋势已经存在一段时间了,但是疫情让这种需求变得更加的迫切。
如果你的企业完全依附于传统的、纯线下的经验模式,那么在2020年你将“必死无疑”,
一场巨大的,前所未有的互联网革命已经到来!
阿里云建站为了助力各行各业复工复产,疫情期间“马不停蹄”为数以万计的企业快速完成
建站,为他们朝着“线上线下融合”或者“纯线上”的互联网经营模式迈进,打下了坚实的基础。
“云·速成美站”模板建站1天就能上线,不懂技术没关系,打字就能建网站。千套网站模
板免费提供,百元就能建官网,一价全包,无任何隐形消费。
“云·企业官网”定制建站1周就能上线,高端量身定制建站,千元建官网无需自己动手,
建站专家1对1网站策划及设计,专业省心之选。
疫情,是一场大浪淘沙,每一次危机背后都隐藏着机会,危机越大,机会也越大。大环境
已经改变,如果你不努力不去改变来迎合这个大环境,那你必将被淘汰。
阿里云助力企业建站,优惠多多,福利多多,详情请点击如下链接
https://www.aliyun.com/minisite/goods?userCode=tz7kl4ag