bzoj3212 pku3468 A Simple Problem with Integers
一个有初值的数列、区间加、区间查
用线段树直接水过
然而并没有1A,主要是做题太快没看规模结果没注意线段树要用longlong建
卧槽怎么可以这么坑爹,害得我看见wa心慌了,还以为连线段树都要跪
一开始在写下传(MDZZ)然后发现没什么操作就删了
1 #include <cstdio> 2 #include <iostream> 3 #define mid (l+r)/2 4 long long t[400001],tr[400001]; 5 int n,m; 6 void add(int now,int l,int r,int x,int y) 7 { 8 t[now]+=y; 9 if(l==r) 10 return; 11 if(x<=mid) 12 add(now*2,l,mid,x,y); 13 else 14 add(now*2+1,mid+1,r,x,y); 15 } 16 void plus(int now,int l,int r,int x,int y,int z) 17 { 18 if(l==x && r==y) 19 { 20 tr[now]+=z; 21 return; 22 } 23 if(x<=mid) 24 plus(now*2,l,mid,x,std::min(y,mid),z); 25 if(y>mid) 26 plus(now*2+1,mid+1,r,std::max(x,mid+1),y,z); 27 t[now]=t[now*2]+tr[now*2]*(mid-l+1)+t[now*2+1]+tr[now*2+1]*(r-mid); 28 } 29 long long que(int now,int l,int r,int x,int y) 30 { 31 if(l==x && r==y) 32 return t[now]+tr[now]*(r-l+1); 33 long long sum=(y-x+1)*tr[now]; 34 if(x<=mid) 35 sum+=que(now*2,l,mid,x,std::min(y,mid)); 36 if(y>mid) 37 sum+=que(now*2+1,mid+1,r,std::max(x,mid+1),y); 38 return sum; 39 } 40 int main() 41 { 42 scanf("%d%d",&n,&m); 43 for(int i=1;i<=n;i++) 44 { 45 int x; 46 scanf("%d",&x); 47 add(1,1,n,i,x); 48 } 49 for(int i=1;i<=m;i++) 50 { 51 char ch=getchar(); 52 for(;ch!='C' && ch!='Q';ch=getchar()); 53 if(ch=='C') 54 { 55 int x,y,z; 56 scanf("%d%d%d",&x,&y,&z); 57 plus(1,1,n,x,y,z); 58 } 59 else 60 { 61 int x,y; 62 scanf("%d%d",&x,&y); 63 printf("%lld\n",que(1,1,n,x,y)); 64 } 65 } 66 return 0; 67 }
转载于:https://www.cnblogs.com/wanglichao/p/5684426.html
bzoj3212 pku3468 A Simple Problem with Integers相关推荐
- 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)
[线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...
- poj 3243:A Simple Problem with Integers
3243:A Simple Problem with Integers 查看 提交 统计 提示 提问 总时间限制: 5000ms 单个测试点时间限制: 2000ms 内存限制: 131072 ...
- poj3468 A Simple Problem with Integers
http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=14607 题意:题目给你n个数,m个操作,接下来一行给你这n个数,接下 ...
- (线段树模板)A Simple Problem with Integers --POJ--3468
链接: http://poj.org/problem?id=3468 代码: 1 #include<stdio.h> 2 #include<algorithm> 3 #incl ...
- POJ3468 A Simple Problem with Integers【线段树 成段更新+求和 lazy标志】
用longlong替换__int64也成. #define LL long long 输入输出用%lld Problem: 3468 User: qq1203456195 Memory: 4284 ...
- A Simple Problem with Integers
http://poj.org/problem?id=3468 http://acm.hdu.edu.cn/showproblem.php?pid=4267 C++版本一 /* *@Author: ST ...
- poj 3468 A Simple Problem with Integers(线段树区区)
题目链接: http://poj.org/problem?id=3468 题目大意: 给出N个数,和M次查询 C a b c 区间[a,b]的值都加上c Q a b 查询区间[a,b]值 ...
- A Simple Problem with Integers POJ - 3468(线段树+区间查询+区间修改+建树+懒惰标记模板)+(树状数组)
题意: 有一个数组,有两种操作.1: Q a b 求[a,b]的和 2:C a b c 给[a,b] 的所有元素都加上c. 题目: You have N integers, A1, A2, ... , ...
- POJ 3468 A Simple Problem with Integers(线段树:区间更新)
http://poj.org/problem?id=3468 题意: 给出一串数,每次在一个区间内增加c,查询[a,b]时输出a.b之间的总和. 思路: 总结一下懒惰标记的用法吧. 比如要对一个区间范 ...
最新文章
- TWaver Flex开发示例及license下载
- Android百度地图开发 百度地图得到当前位置
- GitHub+Jenkins持续集成简介
- 优秀的培训机构该如何培养学生?
- python 入门程序_非Python程序员的Python速成课程-如何快速入门
- Facebook如何重新设计HHVM JIT编译器的性能
- 从持续交付看敏捷开发的自相似性(敏捷开发的心跳)
- hashchange
- Oracle Statspack分析报告详解(一)
- Android第十七课 Jni string空串跨模块使用崩溃注意事项
- sas 分析家模块 安装,SAS9.3/9.4统计分析安装使用教程自学资料完整模块最新SID
- 利用nssm将jar包安装为windows服务
- PX4 VTOL控制逻辑
- android地球经纬度平面图,地球经纬度划分图高清 怎么划分经纬度
- win7 linux 虚拟机共享文件夹,Win7主机和虚拟机Linux Virtualbox共享文件夹设置教程...
- 微信推广二维码接口使用总结
- Design Compiler - DC综合的流程(三)
- 我屮艸芔茻,mongo居然可以自动删除数据
- 微信公众号(服务号/订阅号/小程序)注册详细流程
- 小熊开发板STM32工具出现错误Error:an error occured while uploading data from the virtual partition 0xF1
热门文章
- python中调用C++写的动态库
- [Oracle]使用非滚动游标
- [react] 在React中什么时候使用箭头函数更方便呢?
- [html] iOS下页面如何启动加载时显示画面图片?如何设置大小?它有什么好处?
- [html] 关于<form>标签的enctype属性你有哪些了解?
- [vue] 如何实现一个虚拟DOM?说说你的思路
- 前端学习(2389):项目初始化总结
- 前端学习(2013)vue之电商管理系统电商系统之监听on-success事件
- 前端学习(1670):前端系列实战课程之核心运动原理
- java面试题27 java中下面哪些是Object类的方法()