地址 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. DotNet Core中使用dapper

    我们都知道,ORM全称是,Object Relationship Mapper,即,对象关系映射.也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架叫做dappe ...

  2. C# ling to sql 取多条记录最大时间

    var _setList = (from f in _postgreDbContext.settlements group f by ( new { f.settlement_code })into ...

  3. [document.cookie]为什么cookie不在window下的呢.奇怪了[未完待续]

    什么是cookie,怎么就叫cookis,它能干嘛 我猜吧,就是登录页面的时候传值,二次登录的时候可以给你说句'hello xxx'; 下面这堆比较啰嗦,随意看吧 //cookie 用户储存在用户本地 ...

  4. 从0系统学Android--3.1编写UI界面

    从0系统学Android--3.1编写UI界面 本系列文章目录:更多精品文章分类 本系列持续更新中.... 界面设计和功能开发同样重要,界面美观的应用程序不仅可以大大增加用户粘性,还能帮我们吸引到更多 ...

  5. centos7中安装python3.6.4

    1.在安装Python之前,需要先安装一些后面遇到的依赖问题(如果有依赖问题,按照提示安装): yum -y install zlib-devel bzip2-devel openssl-devel ...

  6. Java_枚举Enum基本使用

    特性 在某些情况下,一个类的对象时有限且固定的,如季节类,它只有春夏秋冬4个对象这种实例有限且固定的类,在 Java 中被称为枚举类: 在 Java 中使用 enum 关键字来定义枚举类,其地位与 c ...

  7. linux中的交换分区(swap)及优化

    SWAP(交换内存) 1.什么是交换内存? 在硬盘上创建一块区域,当你的物理内存快要被用光的时候,内核临时的 物理内存上的文件数据交换到硬盘上的这段区域上面,当物理内存有闲置的时候 在把交换内存上的数 ...

  8. Appium(一):java环境、AndroidSDK环境

    1. java环境 java的下载和安装可以看我以前写的Java基础:<java下载和安装>. 2. AndroidSDK环境 2.1 AndroidSDK下载 我们进入:https:// ...

  9. 【CentOS 7】CentOS 7各个版本镜像下载地址(转)

    参考链接:https://www.centos.org/download/mirrors/ https://www.cnblogs.com/defineconst/p/11176593.html

  10. [译]Vulkan教程(09)窗口表面

    [译]Vulkan教程(09)窗口表面 Since Vulkan is a platform agnostic API, it can not interface directly with the ...