总之,今天是一个值得纪念的伟大日子,我将自己的码风进行了彻底的修改,大概是参考了Pks和\(Rqy\)的码风,分为以下几点。
1.变量名。在所有的计算符号之前和之后加空格。如:"&","|","!","\(+\)","\(-\)","\(\times\)","\(/\)"这些运算符。两个相邻的计算符之间不加空格。

原版:

while(c<'0'||c>'9') c=getchar();

后版:

while(c < '0' || c > '9') c = getchar();

2.逗号。每一个逗号之后都跟一个空格,比如:

LL A, B, C, Mark, N, M, Value[MAXN];

3.变量名。尽可能多的使用大写字符和下划线。
例:原版线段树1

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 1000010
using namespace std;
long long value[MAXN],tag[MAXN];
struct point
{
    long long left;
    long long right;
    long long sum;
}edge[MAXN*4];
#define leftson now*2
#define rightson now*2+1
void update(long long now)
{
    edge[now].sum=edge[leftson].sum+edge[rightson].sum;
}
void build(long long left,long long right,long long now)
{
    if(left==right)
    {
        edge[now].sum=value[left];
        return ;
    }
    long long mid=(left+right)/2;
    build(left,mid,now*2);
    build(mid+1,right,now*2+1);
    update(now);
}
void put(long long now,long long mid,long long left,long long right)
{
    if(tag[now])
    {
        tag[leftson]+=tag[now];
        tag[rightson]+=tag[now];
        edge[leftson].sum+=(mid-left+1)*tag[now];
        edge[rightson].sum+=(right-mid)*tag[now];
        tag[now]=0;
    }
}
void change(long long left,long long right,long long now,long long v,long long now_left,long long now_right)
{
    if(now_left<=left)
    if(now_right>=right)
    {
        tag[now]+=v;
        edge[now].sum+=(right-left+1)*v;
        return ;
    }
    long long mid=(left+right)/2;
    put(now,mid,left,right);
    if(now_left<=mid)
    change(left,mid,now*2,v,now_left,now_right);
    if(mid<now_right)
    change(mid+1,right,now*2+1,v,now_left,now_right);
    update(now);
}
long long ask(long long left,long long right,long long now,long long now_left,long long now_right)
{
    long long ans=0;
    if(now_left<=left)
    if(now_right>=right)
    return edge[now].sum;
    long long mid=(left+right)/2;
    put(now,mid,left,right);
    if(mid>=now_left)
    ans+=ask(left,mid,now*2,now_left,now_right);
    if(mid<now_right)
    ans+=ask(mid+1,right,now*2+1,now_left,now_right);
    return ans;
}
int main()
{
    long long n,m;
    scanf("%lld%lld",&n,&m);
    for(long long i=1;i<=n;i++)
        scanf("%lld",&value[i]);
    build(1,n,1);
    for(long long i=1;i<=m;i++)
    {
        long long p; scanf("%lld",&p);
        if(p==1)
        {
            long long x,y,z;
            scanf("%lld%lld%lld",&x,&y,&z);
            change(1,n,1,z,x,y);
        }
        else if(p==2)
        {
            long long x,y;
            scanf("%lld%lld",&x,&y);
            printf("%lld\n",ask(1,n,1,x,y));
        }
    }
    return 0;
}

后版

#include <iostream>
#include <cstdio>
#define MAXN 1000100
#define LL long long
#define Re register
#define LS (now << 1)
#define RS (now << 1 | 1)
#define Mid ((L + R) >>1)
#define E_Mid ((Edge[now].L + Edge[now].R) >> 1)
using namespace std;
inline void Read(LL & x){
    char c = getchar(); x = 0;
    while(c < '0' || c > '9') c = getchar();
    while(c <= '9' && c >= '0')
        x = x * 10 + c - 48, c = getchar();
}
inline void Print(LL x){
    int num = 0; char c[15];
    while(x) c[++num]=(x % 10) + 48, x /= 10;
    while(num) putchar(c[num --]);
    putchar('\n');
}
struct Node{
    LL L, R, Sum, Tag;
}Edge[MAXN << 1];
LL A, B, C, Mark, N, M, Value[MAXN];
inline void Push_Up(LL now){
    Edge[now].Sum = Edge[LS].Sum + Edge[RS].Sum;
}
inline void Push_Down(LL now){
    if(Edge[now].Tag){
        Edge[LS].Tag += Edge[now].Tag, Edge[RS].Tag += Edge[now].Tag;
        Edge[LS].Sum += Edge[now].Tag * (Edge[LS].R - Edge[LS].L + 1);
        Edge[RS].Sum += Edge[now].Tag * (Edge[RS].R - Edge[RS].L + 1);
        Edge[now].Tag = 0;
    }
}
void Build_Tree(LL now, LL L, LL R){
    if(L == R){
        Edge[now].L = L, Edge[now].R = R;
        Edge[now].Sum = Value[L];
        return ;
    }
    Edge[now].L = L;  Edge[now].R = R;
    Build_Tree(RS, Mid + 1, R); Build_Tree(LS, L, Mid);
    Push_Up(now);
}
void Add(LL now, LL L, LL R, LL K){
    if(Edge[now].L >= L && Edge[now].R <= R){
        Edge[now].Tag += K;
        Edge[now].Sum += K * (Edge[now].R - Edge[now].L + 1);
        return ;
    }   Push_Down(now);
    if(E_Mid >= L) Add(LS, L, R, K);
    if(E_Mid < R) Add(RS, L, R, K);
    Push_Up(now);
}
LL Query(LL now, LL L, LL R){
    if(Edge[now].L >= L && Edge[now].R <= R)
        return Edge[now].Sum;
    Push_Down(now); LL Ans = 0;
    if(E_Mid >= L) Ans += Query(LS, L, R);
    if(E_Mid < R) Ans += Query(RS, L, R);
    return Ans;
}
int main(){
    Read(N); Read(M);
    for(int i = 1; i <= N; i ++)
        Read(Value[i]);
    Build_Tree(1, 1, N);
    for(int i = 1; i <= M; i ++){
        Read(Mark);
        if(Mark == 1){
            Read(A); Read(B); Read(C);
            Add(1, A, B, C);
        }   else{
            Read(A); Read(B);
            Print(Query(1, A, B));
        }
    }   return 0;
}

随机推荐

  1. Java 基础(2)——编译运行 & 规范

    上节学到 Java 的编译与运行,我们已经学会了怎么去执行一个写好(假装我们已经会写了)的代码,这篇当然要试试手啦 O(∩_∩)O 哈哈~ 小试一下 新建一个 HelloAhanWhite.java ...

  2. 提示"No 'Access-Control-Allow-Origin' header"及Spring 中解决跨域问题

    问题描述 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://12 ...

  3. IntelliJ IDEA 快捷键(一)(window版)

    一.高效定位代码 1.跳转 1.项目之间的跳转 Next Project Window 快捷键 Ctrl + Alt + 左方括号. Previous Project Window 快捷键 Ctrl ...

  4. 小白学flask之路由,反向路由,路由参数

    # -*- coding: utf-8 -*- from flask import Flask, request, url_for app = Flask(__name__) @app.route(& ...

  5. nginx服务器绑定多个域名、支持pathinfo路由、隐藏index.php入口文件

    这篇文章仅仅是操作,解释说明部分待更新. 1. 修改nginx的配置文件(我的配置文件在/etc/nginx/nginx.conf) [root@xxx ~]# find / -name nginx. ...

  6. 排序算法lowb三人组-冒泡排序

    冒泡排序:顾名思义就是像气泡从水里浮出来一样 把列表立起来如上图所示,从列表的第0项开始循环(把最大的数想成此次循环的气泡) 要把最大的放到上面那那就用第0项开始一次和剩下的开始比较,只要比第0项小就 ...

  7. SPOJ QTREE5

    题意 一棵\(n\)个点的树,点从\(1\)到\(n\)编号.每个点可能有两种颜色:黑或白. 我们定义\(dist(a,b)\)为点\(a\)至点\(b\)路径上的边个数. 一开始所有的点都是黑色的. ...

  8. ArcSDE10.2.2使用SQL操作ST_Geometry时报ORA-28579或ORA-20006错误

    ArcSDE10.2.2使用SQL操作ST_Geometry时报ORA-28579或ORA-20006错误 1.测试环境说明 ArcSDE版本:10.2.2 Oracle版本:12.1.0.1和11. ...

  9. MySQL数据库(5)----删除或更新已有行

    有时候,会需要删除某些行,或者修改其内容.这是候便需要用到DELETE语句和UPDATE语句. 1. DELETE 语句的基本格式如下所示: DELETE FROM tbl_name WHERE wh ...

  10. mianxiangduixiang

    package com.hanqi; public class mianxiang { public static void main(String[]args) { Cat c1 =new Cat( ...