I - 秋实大哥与花

Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu

Appoint description: 
System Crawler  (2016-04-19)

Description

秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前。

所以秋实大哥精心照料了很多花朵。现在所有的花朵排成了一行,每朵花有一个愉悦值。

秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉悦值都会增加一个相同的值v(v可能为负)。

同时他想知道每次他唱完歌后这一段连续的花朵的愉悦值总和是多少。

Input

第一行有一个整数n,表示花朵的总数目。

第二行包含n个整数ai,表示第i朵花初始的愉悦值。

第三行包含一个整数m,表示秋实大哥唱了m天的歌。

接下来m行,每行包含三个整数l r v,表示秋实大哥对着[l,r]这个区间内的花朵歌唱,每朵花的愉悦值增加了v。

1≤n,m,ai,|v|≤100000,1≤l≤r≤n。

Output

输出共m行,第i行表示秋实大哥完成第i天的歌唱后,那一段花朵的愉悦值总和。

Sample Input


0 0 0 

1 2 1 
1 2 -1 
1 3 1

Sample Output


0

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
const int maxn=100000;
ll ans[maxn+10];
struct Tree{
ll sum,lazy;
int l,r;
void fun(ll v){
this->lazy+=v;
sum+=v*(r-l+1);
}//v 需要改成 long long 否则乘下来爆int
int mid(){
return (l+r)>>1;
}
}tree[4*maxn+10]; void pushdown(int id)
{
int k=tree[id].lazy;
if(k==0) return;
tree[2*id].fun(k);
tree[2*id+1].fun(k);
tree[id].lazy=0;
} void pushup(int id)
{
tree[id].sum=tree[2*id].sum+tree[2*id+1].sum;
} void build(int id,int l,int r)
{
tree[id].l=l;
tree[id].r=r;
tree[id].lazy=tree[id].sum=0; if(r==l) scanf("%lld",&tree[id].sum);
else{
int mid=(l+r)>>1;
build(2*id,l,mid);
build(2*id+1,mid+1,r);
pushup(id);
}
} void update(int id,int l,int r,int v)
{
if(l<=tree[id].l&&tree[id].r<=r)
tree[id].fun(v);
else
{
int mid=tree[id].mid();
pushdown(id);
if(l<=mid) update(2*id,l,r,v);
if(r>mid) update(2*id+1,l,r,v);
pushup(id);
}
} ll query(int id,int l,int r)
{
if(l<=tree[id].l&&tree[id].r<=r)
return tree[id].sum;
else {
pushdown(id);
int mid=tree[id].mid();
ll suml=0,sumr=0;
if(l<=mid) suml=query(2*id,l,r);
if(r>mid) sumr=query(2*id+1,l,r);
pushup(id);
return suml+sumr;
}
} int main()
{
int n,m;
while(~scanf("%d",&n))
{
build(1,1,n);
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
int l,r,v;
scanf("%d %d %d",&l,&r,&v);
update(1,l,r,v);
ans[i]=query(1,l,r);
}
for(int i=1;i<=m;i++)
printf("%lld\n",ans[i]);
}
return 0;
}

  分析:模板题,,但是fun函数参数需要写成long long 形式,否则爆int

最新文章

  1. HTML语法大全
  2. sql篇,动态合并数据
  3. spirng定时任务的两种配置:注解和xml
  4. Three.js基础探寻十——动画
  5. Go推出的主要目的之一就是G内部大东西太多了,系统级开发巨型项目非常痛苦,Go定位取代C++,Go以简单取胜(KISS)
  6. 9.8 noip模拟试题
  7. 疯狂学习java web3(javaScript)
  8. Android 开发佳站3
  9. Best Coder #86 1001 Price List(大水题)
  10. linux防火墙之 ufw
  11. JavaScript的基本包装类型概述与基本包装类型_Number类型
  12. Android学习:简易图片浏览
  13. Dubbo注册Zookepper服务的虚拟IP
  14. mini2440裸机试炼之—RTC闹钟中断,节拍中断
  15. python02
  16. 默认五笔输入法qq
  17. Unity 思考问题的办法
  18. linux diff 命令
  19. assert 函数
  20. java就业指南 zookeeper分布式系统 zookeeper实现分布式锁 有用

热门文章

  1. AKKA学习(一)
  2. Vue中使用fullpage.js
  3. 【一个蒟蒻的挣扎】单源最短路(Dijkstra)
  4. dp常见优化方法
  5. AT2292 Division into Two
  6. uoj #450[集训队作业2018]复读机
  7. 用python 获取照片的Exif 信息(获取拍摄设备,时间,地点等信息)
  8. wex5 sqllite本地数据库的运用
  9. 白话算法:时间复杂度和大O表示法
  10. ldd - 显示共享库的依赖情况