首页 > POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】

POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】

 

 用longlong替换__int64也成。

#define LL long long

输入输出用%lld

Problem: 3468 User: qq1203456195
Memory: 4284K Time: 1579MS
Language: C Result: Accepted

 

#include 
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 111111
#define INT __int64
INT sum[maxn<<2],lazy[maxn<<2];
INT ret;
void PullUp(int rt)
{sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void PushDown(int rt,int len)
{lazy[rt<<1]+=lazy[rt];lazy[rt<<1|1]+=lazy[rt];sum[rt<<1]+=lazy[rt]*(len-(len>>1));sum[rt<<1|1]+=lazy[rt]*(len>>1);lazy[rt]=0;
}
void build(int l,int r,int rt)
{int m=(r+l)>>1;lazy[rt]=0;if(l==r){scanf("%I64d",&sum[rt]);return;}build(lson);build(rson);PullUp(rt);
}
void update(INT v,int L,int R,int l,int r,int rt)
{int m=(l+r)>>1;if(l>=L&&r<=R){sum[rt]+=(r-l+1)*v;lazy[rt]+=v;return;}if(lazy[rt]!=0)    PushDown(rt,r-l+1);if(L<=m)        update(v,L,R,lson);if(R>m)            update(v,L,R,rson);PullUp(rt);
}
void query(int L,int R,int l,int r,int rt)
{int m=(l+r)>>1;if(l>=L&&r<=R){ret+=sum[rt];return;}if(lazy[rt]!=0)    PushDown(rt,r-l+1);if(L<=m)        query(L,R,lson);if(R>m)            query(L,R,rson);    
}
int main()
{int n,q,L,R;INT v;char op[2];while (~scanf("%d%d",&n,&q)){build(1,n,1);while (q--){scanf("%s",op);if(op[0]=='C'){scanf("%d%d%I64d",&L,&R,&v);update(v,L,R,1,n,1);}if(op[0]=='Q'){ret=0;scanf("%d%d",&L,&R);query(L,R,1,n,1);printf("%I64d
",ret);}}}return 0;
}

 

 

 

 

 

 

更多相关:

  • BZOJ4551: [Tjoi2016&Heoi2016]树 Description 在2016年,佳媛姐姐刚刚学习了树,非常开心。现在他想解决这样一个问题:给定一颗有根树(根为1),有以下两种操作: 1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个结点,可以打多次标记。) 2. 询问操...

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...