博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【模板】线段树 1(洛谷_3372)
阅读量:4514 次
发布时间:2019-06-08

本文共 1488 字,大约阅读时间需要 4 分钟。

这题的做法就像题目说的那样。

#include
#include
#include
#include
using namespace std;#define ll long longinline ll read(){ ll t=1,num=0;char c=getchar(); while(c>'9'||c<'0'){
if(c=='-')t=-1;c=getchar();} while(c>='0'&&c<='9'){num=num*10+c-'0';c=getchar();} return num*t;}const ll maxn=100010;ll mark[4*maxn],t[4*maxn],a[maxn],n,m;void build(ll ro,ll l,ll r){ mark[ro]=0; if(l==r){t[ro]=a[l];return;} ll mid=(l+r)>>1; build(ro*2,l,mid);build(ro*2+1,mid+1,r); t[ro]=t[ro*2]+t[ro*2+1];}void pushdown(ll ro,ll l,ll r){ ll mid=(l+r)>>1; if(mark[ro]&&l!=r){ mark[ro*2]+=mark[ro]; mark[ro*2+1]+=mark[ro]; t[ro*2]+=(mid-l+1)*mark[ro]; t[ro*2+1]+=(r-mid)*mark[ro]; mark[ro]=0; }}ll ask(ll ro,ll l,ll r,ll x,ll y){ if(x>r||y
>1; return ask(ro*2,l,mid,x,y)+ask(ro*2+1,mid+1,r,x,y);}void change(ll ro,ll l,ll r,ll x,ll y,ll add){ if(x>r||y
>1; change(ro*2,l,mid,x,y,add);change(ro*2+1,mid+1,r,x,y,add); t[ro]=t[ro*2]+t[ro*2+1];}int main(){ n=read();m=read(); for(ll i=1;i<=n;i++)a[i]=read(); build(1,1,n); for(ll i=1;i<=m;i++){ ll k=read(),x=read(),y=read(); if(k==1)change(1,1,n,x,y,read()); else printf("%lld\n",ask(1,1,n,x,y)); } return 0;}
View Code

一开始,wa了3个点。看了一下,突然发现。。

其实是输出没有lld。

本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。

转载于:https://www.cnblogs.com/Yzyet/p/7360418.html

你可能感兴趣的文章
进度条
查看>>
用户画像
查看>>
HTTP报文(面试会问开发时常用的报文头格式)
查看>>
机器学习从业人员到底做什么?
查看>>
word发表博客的方法
查看>>
Programming Erlang_CHAPTER2_Basic Erlang 学习笔记(2)。
查看>>
Linux基础
查看>>
【模板】高精度
查看>>
弱弱的玩下Javascript
查看>>
二叉树相关操作
查看>>
在webstorm开发微信小程序之使用阿里自定义字体图标
查看>>
序列化模块/模块/包
查看>>
eclipse maven plugin 插件 安装 和 配置
查看>>
收集一些复杂有用的正则表达式
查看>>
子数组求和之大数溢出
查看>>
浏览器预览office文件(word,Excel,等)
查看>>
MySQL工具汇总
查看>>
cookie
查看>>
如何使用Eclipse编译C,C++,JAVA程序
查看>>
php小程序-文章发布系统
查看>>