UVa:12086 Potentiometers
区间求和,单点改值。用线段树实现。封装成了一个类。
#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相关推荐
- uva 12086 - Potentiometers(树状数组)
题目链接:uva 12086 - Potentiometers 题目大意:给定n个整数,两个操作, S x y:把第x个数变成y M x y:计算第x个数到第y个数的总和 解题思路:用num数组记录每 ...
- UVA - 12086 - Potentiometers - (单点更新,区间查询)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVA 12086 Potentiometers(线段树裸题)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVa 12086 - Potentiometers
題目:已知一個序列,有兩種操作S x y:將第x各元素替換成y,M x y:求第x倒第y各元素的和. 分析:數據結構,樹狀數組.區間操作直接用樹狀數組或線段樹. 說明:╮(╯▽╰)╭. #includ ...
- uva 12086 - Potentiometers--树状数组
// // main.cpp // uva 12086 - Potentiometers--树状数组 // // Created by XD on 15/9/10. // Copyright (c) ...
- UVA 12086 (树状数组)
题目网址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva 12086 线段树or树状数组练习
题目链接 https://vjudge.net/problem/34215/origin 这个题就是线段树裸题,有两种操作,实现单点更新和区间和的查找即可,这里第一次学习使用树状数组完成. 二者相 ...
- UVa OJ 12086
1.Fenwick树的基础题,没什么花头,就是套模板,居然因为s数组开小了而WA,囧... #include<cstdio> #include<cstring> using n ...
- [搜索]UVa 129 困难的串
题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...
最新文章
- hdu 5493 Queue(逆序对,线段树)
- loadrunner基础知识问答(转)
- price initialization when clicking new button in WebUI
- linux 第一个内核模块Hello World
- ajax封装 使用,AJAX封装类使用指南
- python 3d大数据可视化_基于Python的数据可视化库pyecharts介绍
- 【redis】redis基础命令,分布式锁,缓存问题学习大集合
- 游戏开发之C++继承与派生(包含访问控制)(C++基础)
- 学生阅读作业三——对习而学教学方式的思考
- HTML+CSS实现淘宝首页
- oracle存储过程导出scv文件
- SECS协议基础知识
- matlab 最舒适的背景配色
- arduino 鸿蒙,arduino入门开发案例(上)
- python colormap函数_Python colormap库的安装和使用详情
- Git 核心概念:工作区与暂缓区(添加提交及查看状态充分体现)
- excel不显示0_Excel中把0显示为空白的三种解决方法
- 我的电子相册网页HTML案例
- 大数据技术与应用实验报告1
- CCS10,安装SDK后,软件无法识别问题
热门文章
- linux 直角字符,如何实现打印直角三角形的详细解释
- 【C++】探讨std::move()作用,查到的《C++11右值引用和std::move语句实例解析》
- PostgreSQL学习篇9.15 JSON类型
- SAP-PM设备模块-维修计划-预防性维护
- 博弈论在生活中的应用
- PB利用SaveAs生成PDF报表
- 云原生Spark UI Service在腾讯云云原生数据湖产品DLC的实践
- SCL+顺控GRAPH西门子PLC1500 SCL程序 包括PLC程序,触摸屏程序 灌装线程序有配方
- Android 8 common dialog
- HarmonyOS开发19:CommonDialog基本用法