POJ 3468 A Simple Problem with Integers(线段树成段更新)
来源:互联网 发布:格罗兹尼巷战 知乎 编辑:程序博客网 时间:2024/09/21 06:18
题意很好理解...
这题增量要用int64..增量可以为负...小心数据类型溢出...感觉自己写的lazy操作有点挫...应该说是搓成渣了....
不过能AC就好...WA了好多次 干脆都全部换成int64才过了....坑爹的题目
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<iostream>using namespace std;struct node{__int64 l,r,x;__int64 sum;}data[600200];void build(__int64 l,__int64 r,__int64 k){data[k].l=l;data[k].r=r;data[k].x=0;if(l==r){scanf("%I64d",&data[k].sum);return ;}__int64 mid=(l+r)/2;build(l,mid,k<<1);build(mid+1,r,k<<1|1);data[k].sum=data[k<<1].sum+data[k<<1|1].sum;}void updata(__int64 l,__int64 r,__int64 k,__int64 add){if(data[k].l==l&&data[k].r==r){data[k].sum+=(__int64)add*(r-l+1);data[k].x+=add;return ;}__int64 mid=(data[k].l+data[k].r)/2;updata(data[k].l,mid,k*2,data[k].x);updata(mid+1,data[k].r,k*2+1,data[k].x);data[k].x=0;data[k].sum+=(r-l+1)*add;if(l>mid)updata(l,r,k*2+1,add);else if(r<=mid)updata(l,r,k*2,add);else{updata(l,mid,k*2,add);updata(mid+1,r,k*2+1,add);}}__int64 query(__int64 l,__int64 r,__int64 k){if(data[k].l==l&&data[k].r==r||data[k].l==data[k].r)return data[k].sum;__int64 ret=0;__int64 mid=(data[k].l+data[k].r)/2;if(data[k].x){updata(data[k].l,mid,k*2,data[k].x);updata(mid+1,data[k].r,k*2+1,data[k].x);data[k].sum=data[k*2].sum+data[k*2+1].sum;data[k].x=0;}if(l>mid)ret+=query(l,r,k*2+1);else if(r<=mid)ret+=query(l,r,k*2);elseret+=query(l,mid,k*2)+query(mid+1,r,k*2+1);return ret;}int main(){__int64 n,q;scanf("%I64d %I64d",&n,&q);build(1,n,1);while(q--){char op[5];__int64 a,b,c;scanf("%s",op);if(op[0]=='Q'){scanf("%I64d %I64d",&a,&b);printf("%I64d\n",query(a,b,1));}else{scanf("%I64d %I64d %I64d",&a,&b,&c);updata(a,b,1,c);}}return 0;}
0 0
- poj 3468 A Simple Problem with Integers(线段树成段更新)
- POJ 3468 A Simple Problem with Integers线段树成段更新
- POJ 3468 A Simple Problem with Integers(线段树成段更新)
- poj 3468 A Simple Problem with Integers(线段树成段更新,延迟标记,Lazy)
- POJ 3468 A Simple Problem with Integers?(线段树成段更新求和)
- POJ 3468 A Simple Problem with Integers(线段树成段更新)
- POJ 3468 A Simple Problem with Integers(线段树成段更新)
- POJ 题目3468 A Simple Problem with Integers(线段树成段更新,区间求和)
- POJ 3468 A Simple Problem with Integers(线段树成段更新)
- poj 3468 A Simple Problem with Integers (线段树成段更新)
- POJ - 3468 A Simple Problem with Integers(线段树成段更新,查询区间和)
- poj 3468 A Simple Problem with Integers(线段树成段更新lazy)
- poj3468 A Simple Problem with Integers(线段树成段更新)
- A Simple Problem with Integers(线段树成段更新)
- POJ 3468 A SIMPLE PROBLEM WITH INTEGERS(线段树)
- poj 3468 A Simple Problem with Integers ( 线段树 )
- POJ 3468 A Simple Problem with Integers (线段树)
- POJ 3468 A Simple Problem with Integers(线段树)
- Codeforces 510B Fox And Two Dots DFS
- struts2中页面跳转问题个人小结(一)
- NGUI控件说明(中文) UIToggle
- 执行计划查看方法(Explain plan)
- odoo8下新增时初始化明细项目的新增
- POJ 3468 A Simple Problem with Integers(线段树成段更新)
- Codeforces Round #290 (Div. 2)D - Fox And Jumping——数论gcd=1
- 《HTTP权威指南》读书笔记(1)-HTTP简介与消息结构
- [UVA10245] The Closest Pair Problem && 暴力版本
- leetcode_143_Reorder List
- iOS开发/设计面试题汇总
- WebView基本使用
- 关系型数据库与NOSQL数据库的区别
- 在PHPStorm中调试PHP代码