$Yeasion$的码风修改历程
总之,今天是一个值得纪念的伟大日子,我将自己的码风进行了彻底的修改,大概是参考了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;
}
随机推荐
- 初学zookeeper--自定义事件监听
zk有四种节点类型: 持久节点,持久顺序节点,临时节点,临时顺序节点. 自定义监听事件时,在节点的创建,修改,删除的方法第一行都需要加入是否监听的一个方法: //开启监听的方法.第二个参数表示是否开启 ...
- request方法总结
1.获得指定的头 String header = response.getHeader("user-agent"); 2.获得所有头的名称 Enumeration<Stri ...
- Android - 内存泄漏的情况以及解决方法
[译]Android内存泄漏的八种可能(上) Android防止内存泄漏的八种方法(下). Static Activities 在类中定义了静态Activity变量,把当前运行的Activity实例赋 ...
- maven(04)--一个简单的项目
简单介绍 一个maven项目,使用hibernate框架,实现向mysql数据库中添加和获取操作,其他操作也是类似 如果你没有hibernate,那么也不要紧,这里主要介绍如何在一个maven项目中引 ...
- JS对象原型的理解
基于原型的语言 JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板.从原型继承方法和属性.原型对象 ...
- 小任务之使用SVG画柱状图~
function drawBar(data) { var barGraph = document.querySelector("#bar-graph"); var graphWid ...
- 洛谷11月月赛题解(A-C)
心路历程 辣鸡T3卡我1.5h题意,要不是最后nlh跟我解释了一下大样例估计这次是真凉透了.. A P4994 终于结束的起点 打出暴力来发现跑的过最大数据?? 保险起见还是去oeis了一波,然后被告 ...
- Linux基础之-正则表达式(grep,sed,awk)
一. 正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式是对字符串操作的一种逻辑公 ...
- (MVVM) ListBox Binding 和 实时刷新
当需要用Lisbbox 来log 一些记录的时候,ObservableCollection 并不可以是记录实时的反应在WPF 的UI上面. 这个时候就需要用一个异步collection 来完成. // ...
- ArcSDE 常用命令
一.sdeservice命令: 1. 创建sde服务:sdeservice –o create ArcSDE常用操作命令(转): 启动cmd 1. 创建和删除ArcSDE服务操作命令(sdeservi ...