题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166

 #include<bits/stdc++.h>
using namespace std;
class Node
{
private:
int val;
Node *left, *right; public:
Node();
void set_val(int v);
void set_left(Node* t);
void set_right(Node* t);
int get_val();
Node* get_left();
Node* get_right();
}; Node::Node()
{
left = NULL;
right = NULL;
val = ;
} void Node::set_val(int v)
{
val = v;
} void Node::set_left(Node *t)
{
left = t;
} void Node::set_right(Node *t)
{
right = t;
} int Node::get_val()
{
return val;
} Node* Node::get_left()
{
return left;
} Node* Node::get_right()
{
return right;
} void build(int l, int r, Node* cur, int *a)
{
if(l == r)
{
cur->set_val(a[l]);
return;
}
int mid = (l + r) >> ; cur->set_left(new Node);
build(l, mid, cur->get_left(), a); cur->set_right(new Node);
build(mid+, r, cur->get_right(), a); cur->set_val(cur->get_left()->get_val() + cur->get_right()->get_val());
} void change(int i, int j, int curl, int curr, Node* cur)
{
if(curl == curr)
{
cur->set_val(cur->get_val() + j);
return;
} int mid = (curl + curr)>>;
if(i <= mid)
change(i, j, curl, mid, cur->get_left());
else
change(i, j, mid+, curr, cur->get_right()); cur->set_val(cur->get_left()->get_val() + cur->get_right()->get_val());
} int Search(int l, int r, int curl, int curr, Node* cur)
{
if(l <= curl && r >= curr)
return cur->get_val(); int mid = (curl + curr)>>;
if(l > mid)
return Search(l, r, mid+, curr, cur->get_right()); if(r <= mid)
return Search(l, r, curl, mid, cur->get_left()); return Search(l, r, curl, mid, cur->get_left()) + Search(l, r, mid+, curr, cur->get_right());
}
int main()
{
int T;
scanf("%d", &T);
char command[],c[][]={"End","Query","Add","Sub"};
for(int cas = ; cas <= T; cas++)
{
int n;
scanf("%d", &n);
int *a = new int[n+];
for(int i = ; i <= n; i++)
scanf("%d", &a[i]);
Node *root = new Node;
build(, n, root, a);
printf("Case %d:\n", cas);
int i, j;
for(;;)
{
scanf("%s", command);
if(!strcmp(command,c[]))
break; else
{
scanf("%d %d",&i, &j);
if(!strcmp(command,c[]))
printf("%d\n",Search(i, j ,, n, root));
else if(!strcmp(command,c[]))
change(i, j, , n, root);
else if(!strcmp(command,c[]))
change(i, -j, , n, root);
}
}
delete root;
delete a;
}
return ;
}

HDU1166-敌兵布阵(线段树)的更多相关文章

  1. HDU-1166敌兵布阵(线段树)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  2. hdu1166 敌兵布阵(线段树 求区间和 更新点)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. hdu1166 敌兵布阵 线段树(区间更新)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. HDU1166 敌兵布阵(线段树)

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  5. 【生活没有希望】hdu1166敌兵布阵 线段树

    线段树水题刷刷,生活没有希望 最近看到代码跟树状数组差不多短的非递归线段树,常数也很小——zkw线段树 于是拿道水题练练手 短到让人身无可恋 ;pos;pos/=) a[pos]+=x;} ,ans= ...

  6. HDU1166 敌兵布阵 线段树详解

    题解: 更新是线段树的单点更新,简单一点. 有50000个阵营,40000查询,用普通数组肯定超时.区间求和和区间查询问题用线段树最好不过了. 先说说什么是线段树. 区间[1,10]用树的方法存起来, ...

  7. HDU1166 敌兵布阵 —— 线段树单点修改

    题目链接:https://vjudge.net/problem/HDU-1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布 ...

  8. HDU1166 敌兵布阵 [线段树模板]

    题意:在序列中修改单点和查询区间和 #include<iostream> #include<cstdio> #include<cstring> #define ls ...

  9. HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)

    HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...

  10. hdu 1166 敌兵布阵 线段树 点更新

    // hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...

随机推荐

  1. Spring配置文件解析--依赖注入

    1.构造器注入基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个依赖.此外,还可通过给stattic工厂方法传参数来构造bean.构造器参数解析根据参数类型进行匹配,如果bean的构造器 ...

  2. ibatis基础

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-/ ...

  3. Extjs jar包问题

    当前使用struts2.23版本,使用用了jsonplugin-0.3x.jar报: com.opensymphony.xwork2.util.TextUtils错. json-lib-2.x.jar ...

  4. JButton计数

    1.引言 在Swing窗口中,我们时常会点击按钮进行计数,例如点击按钮A,第一次弹出窗口1,第二次弹出窗口2....以及按钮的快捷键设置. import java.awt.event.ActionEv ...

  5. Aeroplane chess(HDU 4405)

    Aeroplane chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. Windows Store App 用户库文件操作

    (1)获取用户库位置 如果想要通过应用程序在用户库中创建文件,首先需要获得用户库中指定的位置,例如图片库.文档库等.这里值得注意的是,在获取用户库的位置之前,必须在Windows应用商店项目的清单文件 ...

  7. ubuntu14.10服务器版安装xampp,配置域名端口访问

    1.从xampp下载下了xampp-linux-1.7.3a.tar这个包,然后ftp到我的linux虚拟机中, 2.复制到opt下,(可以直接解压的)到opt下面,tar xvfz xampp-li ...

  8. js方法控制html表格的增加和删除

    <!DOCTYPE html> <html> <head> <title>linshi3.html</title> <meta htt ...

  9. hdu 4612 Warm up

    http://acm.hdu.edu.cn/showproblem.php?pid=4612 将原图进行缩点 变成一个树 树上每条边都是一个桥 然后加一条边要加在树的直径两端才最优 代码: #incl ...

  10. CodeIgniterCodeigniter+PHPExcel导出数据到Excel文件

    解压压缩包里的Classes文件夹中的内容到application\libraries\目录下,目录结构如下:--application\libraries\PHPExcel.php--applica ...