区间求和,单点改值。用线段树实现。封装成了一个类。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#define ll  long long
#define INF 2139062143
#define inf -2139062144
#define MOD 20071027
#define MAXN  1005
#define LEN 222222<<2
using namespace std;
int n;
struct Segment_tree
{
private:int sum[LEN];int ql,qr,sz,sp,sv;void pushup(int o){sum[o]=sum[o<<1]+sum[o<<1|1];}int myquery(int o,int L,int R){int M=L+(R-L)/2,ans=0;if(ql<=L&&R<=qr) return sum[o];if(ql<=M) ans+=myquery(o<<1,L,M);if(M<qr) ans+=myquery(o<<1|1,M+1,R);return ans;}void myupdate(int o,int L,int R){int M=L+(R-L)/2;if(L==R){sum[o]=sv;return ;}else{if(sp<=M)  myupdate(o<<1,L,M);else  myupdate(o<<1|1,M+1,R);pushup(o);}}
public:void clear(int n){sz=n;int len=n<<2;for(int i=0; i<=len; ++i)sum[i]=0;}void build(int o,int L,int R){if(L==R)scanf("%d",&sum[o]);else{int M=(L+R)>>1;build(o<<1,L,M);build(o<<1|1,M+1,R);pushup(o);}}int query(int L,int R){ql=L;qr=R;return  myquery(1,1,n);}void update(int p,int v){sp=p;sv=v;myupdate(1,1,n);}
};
Segment_tree tree;
int main()
{int kase=0;while(scanf("%d",&n)&&n){char str[10];tree.clear(n);tree.build(1,1,n);if(kase) printf("\n");printf("Case %d:\n",++kase);while(scanf("%s",str)&&str[0]!='E'){int x,y;scanf("%d%d",&x,&y);if(str[0]=='S')tree.update(x,y);elseprintf("%d\n",tree.query(x,y));}}return 0;
}

UVa:12086 Potentiometers相关推荐

  1. uva 12086 - Potentiometers(树状数组)

    题目链接:uva 12086 - Potentiometers 题目大意:给定n个整数,两个操作, S x y:把第x个数变成y M x y:计算第x个数到第y个数的总和 解题思路:用num数组记录每 ...

  2. UVA - 12086 - Potentiometers - (单点更新,区间查询)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  3. UVA 12086 Potentiometers(线段树裸题)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  4. UVa 12086 - Potentiometers

    題目:已知一個序列,有兩種操作S x y:將第x各元素替換成y,M x y:求第x倒第y各元素的和. 分析:數據結構,樹狀數組.區間操作直接用樹狀數組或線段樹. 說明:╮(╯▽╰)╭. #includ ...

  5. uva 12086 - Potentiometers--树状数组

    // // main.cpp // uva 12086 - Potentiometers--树状数组 // // Created by XD on 15/9/10. // Copyright (c) ...

  6. UVA 12086 (树状数组)

    题目网址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. uva 12086 线段树or树状数组练习

    题目链接   https://vjudge.net/problem/34215/origin 这个题就是线段树裸题,有两种操作,实现单点更新和区间和的查找即可,这里第一次学习使用树状数组完成. 二者相 ...

  8. UVa OJ 12086

    1.Fenwick树的基础题,没什么花头,就是套模板,居然因为s数组开小了而WA,囧... #include<cstdio> #include<cstring> using n ...

  9. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

最新文章

  1. hdu 5493 Queue(逆序对,线段树)
  2. loadrunner基础知识问答(转)
  3. price initialization when clicking new button in WebUI
  4. linux 第一个内核模块Hello World
  5. ajax封装 使用,AJAX封装类使用指南
  6. python 3d大数据可视化_基于Python的数据可视化库pyecharts介绍
  7. 【redis】redis基础命令,分布式锁,缓存问题学习大集合
  8. 游戏开发之C++继承与派生(包含访问控制)(C++基础)
  9. 学生阅读作业三——对习而学教学方式的思考
  10. HTML+CSS实现淘宝首页
  11. oracle存储过程导出scv文件
  12. SECS协议基础知识
  13. matlab 最舒适的背景配色
  14. arduino 鸿蒙,arduino入门开发案例(上)
  15. python colormap函数_Python colormap库的安装和使用详情
  16. Git 核心概念:工作区与暂缓区(添加提交及查看状态充分体现)
  17. excel不显示0_Excel中把0显示为空白的三种解决方法
  18. 我的电子相册网页HTML案例
  19. 大数据技术与应用实验报告1
  20. CCS10,安装SDK后,软件无法识别问题

热门文章

  1. linux 直角字符,如何实现打印直角三角形的详细解释
  2. 【C++】探讨std::move()作用,查到的《C++11右值引用和std::move语句实例解析》
  3. PostgreSQL学习篇9.15 JSON类型
  4. SAP-PM设备模块-维修计划-预防性维护
  5. 博弈论在生活中的应用
  6. PB利用SaveAs生成PDF报表
  7. 云原生Spark UI Service在腾讯云云原生数据湖产品DLC的实践
  8. SCL+顺控GRAPH西门子PLC1500 SCL程序 包括PLC程序,触摸屏程序 灌装线程序有配方
  9. Android 8 common dialog
  10. HarmonyOS开发19:CommonDialog基本用法