地址 http://poj.org/problem?id=3468

线段树模板

要背下此模板

线段树

 #include <iostream>
#include <vector>
#include <math.h>
#include <algorithm> using namespace std; /*
Sample Input
10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
Sample Output
4
55
9
15
*/
typedef long long ll; const int DAT_SIZE = ( << ) - ; const int MAX_N = ; //输入
int N, Q;
int A[MAX_N];
char T[MAX_N];
int L[MAX_N], R[MAX_N], X[MAX_N]; //线段树
ll dat_a[DAT_SIZE], dat_b[DAT_SIZE]; //对区间[a,b]同时加x
//k是节点的编号 对应的空间是[l,r)
void add(int a, int b, int x, int k, int l, int r)
{
if (a <= l && r <= b) {
dat_a[k] += x;
}
else if (l < b && a < r) {
dat_b[k] += (min(b,r)-max(a,l))* x;
add(a, b, x, k * + , l, (l + r) / );
add(a, b, x, k * + , (l + r) / , r);
}
} //计算[a,b)的和
//k是节点的编号 对应的区间是[l,r)
ll sum(int a, int b, int k, int l, int r)
{
if (b <= l || r <= a) {
return ;
}
else if(a <= l && r <= b){
return dat_a[k] * (r - l) + dat_b[k];
}
else {
ll res = (min(b,r)-max(a,l)) * dat_a[k];
res += sum(a, b, k * + , l, (l + r) / );
res += sum(a, b, k * + , (l + r) / , r);
return res;
}
} void solve()
{
for (int i = ; i < N; i++) {
add(i, i + , A[i], , , N);
}
for (int i = ; i < Q; i++) {
if (T[i] == 'C') {
add(L[i]-, R[i] , X[i], , , N);
}
else {
printf("%lld\n",sum(L[i]-,R[i],,,N));
}
}
} int main()
{
cin >> N >> Q; for (int i = ; i < N; i++) {
cin >> A[i];
} for (int i = ; i < Q; i++) {
cin >> T[i];
if (T[i] == 'C')
cin >> L[i] >> R[i] >> X[i];
else
cin >> L[i] >> R[i];
} solve(); return ;
}

 #include <iostream>
#include <vector> using namespace std; /*
Sample Input
10 5
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
Sample Output
4
55
9
15
*/ typedef long long ll; int n, m; const int MAX_N = ;
int input[MAX_N]; struct Node {
int l, r;
ll data;
}; struct Node stree[MAX_N * ]; void build(int idx, int l, int r)
{
stree[idx].l = l;
stree[idx].r = r;
if (l == r) {
//叶子节点
stree[idx].data = input[l];
return;
} int mid = (l + r) / ;
build(idx * , l,mid);
build(idx * + , mid + , r); stree[idx].data = stree[idx * ].data + stree[idx * + ].data;
} ll query(int idx, int start, int end, int l, int r)
{
if (l == stree[idx].l && r == stree[idx].r) {
return stree[idx].data;
} int mid = (start + end) / ;
if (l <= mid && r <= mid) {
return query(idx * , start, mid, l, r);
}
else if (l > mid && r > mid) {
return query(idx * + , mid + , end, l, r);
}
else {
ll res = ;
res += query(idx * , start, mid, l, mid);
res += query(idx * + , mid + , end, mid + , r);
return res;
} } void add(int idx, int l, int r, int v)
{
if (l == r && stree[idx].l == stree[idx].r && stree[idx].l == l) {
//叶子节点
stree[idx].data += v;
return;
} int mid = (stree[idx].l + stree[idx].r) / ;
if (l <= mid && r <= mid) {
add(idx * , l, r,v);
}
else if (l > mid && r > mid) {
add(idx * + , l, r,v);
}
else {
add(idx * , l, mid, v);
add(idx * + , mid+, r, v);
} stree[idx].data = stree[idx*].data + stree[idx*+].data;
} int main()
{
int n, m;
cin >> n >> m;
for (int i = ; i <= n; i++) {
cin >> input[i];
} build(, , n); for (int i = ; i < m; i++) {
char t;
int l, r, v;
cin >> t;
if (t == 'C') {
cin >> l >> r >> v;
add(, l, r, v);
}
else if (t == 'Q') {
cin >> l >> r;
cout << query(, , n, l, r) << endl;
}
} return ;
}

自写TLE代码

poj 3468 A Simple Problem with Integers 线段树 题解《挑战程序设计竞赛》的更多相关文章

  1. poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和

    A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...

  2. poj 3468 A Simple Problem with Integers 线段树区间加,区间查询和(模板)

    A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?i ...

  3. poj 3468 A Simple Problem with Integers 线段树第一次 + 讲解

    A Simple Problem with Integers Description You have N integers, A1, A2, ... , AN. You need to deal w ...

  4. [POJ] 3468 A Simple Problem with Integers [线段树区间更新求和]

    A Simple Problem with Integers   Description You have N integers, A1, A2, ... , AN. You need to deal ...

  5. poj 3468 A Simple Problem with Integers (线段树区间更新求和lazy思想)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 75541   ...

  6. POJ 3468 A Simple Problem with Integers(线段树 成段增减+区间求和)

    A Simple Problem with Integers [题目链接]A Simple Problem with Integers [题目类型]线段树 成段增减+区间求和 &题解: 线段树 ...

  7. POJ 3468 A Simple Problem with Integers //线段树的成段更新

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 59046   ...

  8. poj 3468 A Simple Problem with Integers 线段树加延迟标记

    A Simple Problem with Integers   Description You have N integers, A1, A2, ... , AN. You need to deal ...

  9. poj 3468 A Simple Problem with Integers 线段树区间更新

    id=3468">点击打开链接题目链接 A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072 ...

随机推荐

  1. 更换国内pip

    pip国内的一些镜像 原始地址:https://pypi.python.org/simple 国内地址: 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技 ...

  2. Java 基础复习 基础数据类型与包装器类型

    Java 基础 基础数据类型与包装器类型 基础数据类型 java 中包含哪些基础数据类型,默认值分别是多少? 基础数据类型 byte short int long double float char ...

  3. U盘启动安装系统之旅----记录自己的第一次操作

    网上也有很多装系统的教程,这篇主要是对自己第一次装系统的一个记录,很惭愧,现在才尝试第一次用U盘启动装系统.经常有人说,系统都不会装,就别说搞这行的.当你会了,你就会觉得其实它真的是一件很简单的事情. ...

  4. 中小后台系统UI框架--EasyUI

    后台开发人员不擅长前端UI界面,而小型软件公司没有专职美工岗位,开发人员只能借助开源UI框架,复用已有组件,完成用户操作界面.EasyUI是基于jQuery的UI插件集合体,可帮助开发者轻松构建网页. ...

  5. CentOS7 如何升级Git

    CentOS7自带的git版本1.8.3.1,这个版本有点低了.于是决定折腾升级,我首先想到的是用update更新: yum update git 结果,事与原违,还是1.8.3.1.在网上提供的升级 ...

  6. s3c2440裸机-异常中断(一. 异常、中断的原理与流程)

    1.异常中断概述 在arm架构的处理器中,cpu有7中工作模式,2中工作状态. 1.CPU模式(Mode): 7种Mode: 除了usr/sys,其他5种都是异常模式.我们知道中断属于异常的2中,中断 ...

  7. 10. Vue - axios

    一.预备知识 1. JS面向对象 特点:ES5之前用构造函数方式,构造函数就是一个普通函数,它的函数名大写. 构造函数的问题:方法不会提升至构造函数内,而是每创建一个对象,就要把那个方法保存在每个对象 ...

  8. <挑战程序设计竞赛> poj 3320 Jessica's Reading Problem 双指针

    地址 http://poj.org/problem?id=3320 解答 使用双指针 在指针范围内是否达到要求 若不足要求则从右进行拓展  若满足要求则从左缩减区域 代码如下  正确性调整了几次 然后 ...

  9. SpringBoot开发准备工作,保存备用,

    application.properties server.port=8080 spring.thymeleaf.prefix = classpath:/static/ spring.thymelea ...

  10. [考试反思]1113csp-s模拟测试113:一念

    在这么考下去可以去混女队了2333 两天总分rank14,退役稳稳的 的确就是没状态.满脑子都是<包围保卫王国>ddp/LCT/ST,没好好考试. 我太菜了写题也写不出来考试也考不好(显然 ...