POJ-3468 A Simple Problem with Integers
来源:互联网 发布:淘宝怎样识别死人衣服 编辑:程序博客网 时间:2024/05/20 17:41
题目链接:https://vjudge.net/problem/POJ-3468
用线段树解决,成段更新时要使用懒惰标记加速
#include<iostream>#include<cstdio>#include<cstring> #include<algorithm>#include<cmath>typedef long long ll;#define maxn 100010struct node{ int l, r;ll sum; int mid(){ return (l+r)>>1; }};node Tree[maxn<<2];ll value[maxn+10]; //从 1 开始赋值 ll vis[maxn<<2];//初始化树,根节点是1void init_tree(int root, int l, int r){ Tree[root].l = l; Tree[root].r = r; vis[root]=0; if(l == r) Tree[root].sum = value[l]; else{ init_tree(root<<1, l, (l+r)>>1); init_tree((root<<1)+1, ((l+r)>>1) + 1, r); Tree[root].sum = Tree[root<<1].sum + Tree[(root<<1)+1].sum; }}void pushdown(int rt,int m){if(vis[rt]){vis[rt<<1]+=vis[rt];vis[rt<<1|1]+=vis[rt];Tree[rt<<1].sum+=(ll)(vis[rt])*(m-(m>>1));Tree[rt<<1|1].sum+=(ll)(vis[rt])*(m>>1);vis[rt]=0;}}//查找和ll query_tree(int root, int l, int r){ int m = Tree[root].mid(); if(l == Tree[root].l && r == Tree[root].r) return Tree[root].sum; pushdown(root,Tree[root].r-Tree[root].l+1); if(l > m) return query_tree((root<<1)+1, l, r); else if(r <= m) return query_tree(root<<1, l, r); else return query_tree(root<<1, l, m) + query_tree((root<<1)+1, m+1, r);}void update_tree(int root, int l, int r, int v){ if(Tree[root].l ==l&& Tree[root].r==r) { vis[root]+=v; Tree[root].sum+=ll(r-l+1)*v; return; } pushdown(root,Tree[root].r-Tree[root].l+1);int m = Tree[root].mid(); if(l > m) update_tree((root<<1)+1, l, r, v); else if(r <= m) update_tree(root<<1, l, r, v); else { update_tree((root<<1)+1, m+1, r, v); update_tree(root<<1, l, m, v);}Tree[root].sum = Tree[root<<1].sum+Tree[root<<1|1].sum;}int main(){int n,m;while(~scanf("%d%d",&n,&m)){for(int i=1;i<=n;i++)scanf("%lld",&value[i]);init_tree(1,1,n);int a,b,v;char c[5];for(int i=0;i<m;i++){scanf("%s",c);if(c[0]=='C'){scanf("%d%d%d",&a,&b,&v);update_tree(1,a,b,v);}else{scanf("%d%d",&a,&b);printf("%lld\n",query_tree(1,a,b));}} }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
- 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
- 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
- E
- c++11 lambda函数
- struts2 Convention插件零配置,使用注解开发
- Linux系统 各种目录 的作用(转载 谨作笔记)
- JZOJ 5437. 【NOIP2017提高A组集训10.31】Sequence
- POJ-3468 A Simple Problem with Integers
- test
- Kafka设计解析(三)- Kafka High Availability (下)
- too many connections 分析
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试
- 2017第十五届esri用户大会观感(二)——大会整体
- ant 安装和环境配置的方法
- maven 上传第三方jar包到 nexus3.4
- 前端学习资料之HTML