【UVA】12299-RMQ with Shifts(线段树)
改动的时候因为数据非常小,所以能够直接暴力改动,查询的时候利用线段树即可了。
14337858 | RMQ with Shifts | Accepted | C++ | 0.282 | 2014-10-11 16:02:53 |
- #include<cstdio>
- #include<vector>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- #define lson pos<<1
- #define rson pos<<1|1
- const int maxn = 111111;
- const int INF = 111111;
- int arr[maxn];
- int sz;
- struct Node{
- int l,r;
- int _min;
- }node[maxn <<2];
- void BuildTree(int L,int R,int pos){
- node[pos].l = L; node[pos].r = R;
- if(L == R){
- scanf("%d",&node[pos]._min);
- arr[sz ++] = node[pos]._min;
- return ;
- }
- int m = (L + R) >> 1;
- BuildTree(L,m,lson);
- BuildTree(m + 1,R,rson);
- node[pos]._min = min(node[lson]._min,node[rson]._min);
- return;
- }
- void GetNum(int &l,int &r,char *str){
- int L = strlen(str),j;
- for(j = 0; j < L; j++){
- if(str[j] >= '0' && str[j] <= '9'){
- l = l * 10 + (str[j] - '0');
- }
- else if(l)
- break;
- }
- for(;j < L; j++){
- if(str[j] >= '0' && str[j] <= '9'){
- r = r * 10 + str[j] - '0';
- }
- else if(r)
- break;
- }
- return ;
- }
- int Query(int L,int R,int pos){
- if(L <= node[pos].l && node[pos].r <= R)
- return node[pos]._min;
- int m = (node[pos].l + node[pos].r) >> 1;
- int ret = INF;
- if(L <= m)
- ret = min(ret,Query(L,R,lson));
- if(R > m)
- ret = min(ret,Query(L,R,rson));
- return ret;
- }
- void UpDate(int aim,int value,int pos){
- if(node[pos].l == node[pos].r){
- node[pos]._min = value;
- return ;
- }
- int m = (node[pos].l + node[pos].r) >> 1;
- if(aim <= m)
- UpDate(aim,value,lson);
- else
- UpDate(aim,value,rson);
- node[pos]._min = min(node[lson]._min,node[rson]._min);
- return;
- }
- int main(){
- int n,q;
- while(scanf("%d%d",&n,&q) != EOF){
- sz = 1;
- BuildTree(1,n,1);
- char str[100];
- int array[30];
- for(int x = 0; x < q; x++){
- scanf("%s",str);
- if(str[0] == 'q'){
- int l = 0,r = 0;
- GetNum(l,r,str);
- printf("%d\n",Query(l,r,1));
- }
- else{
- memset(array,0,sizeof(array));
- int size = 0, n = strlen(str);
- for(int j = 0 ; j < n; j++){
- if(str[j] >= '0' && str[j] <= '9'){
- array[size] = array[size] * 10 + str[j] - '0';
- }
- else if(array[size] != 0){
- size ++;
- }
- }
- //左移一位
- int temp = arr[array[0]];
- for(int i = 0; i < size; i++){
- int e;
- if(i < size - 1){
- UpDate(array[i],arr[array[i + 1]],1);
- arr[array[i]] = arr[array[i + 1]];
- }
- else{
- UpDate(array[i],temp,1);
- arr[array[i]] = temp;
- }
- }
- }
- // for(int i = 1 ;i <= n; i++) printf("%d ",arr[i]);
- // printf("\n");
- }
- }
- return 0;
- }
【UVA】12299-RMQ with Shifts(线段树)的更多相关文章
- UVa 12299 RMQ with Shifts(线段树)
线段树,没了.. ----------------------------------------------------------------------------------------- # ...
- UVa 12299 RMQ with Shifts(移位RMQ)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: "Times New ...
- HDU 1754 - I Hate It & UVA 12299 - RMQ with Shifts - [单点/区间修改、区间查询线段树]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Time Limit: 9000/3000 MS (Java/Others) Memory Li ...
- RMQ with Shifts(线段树)
RMQ with Shifts Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%I64d & %I64u Pra ...
- TZOJ 4325 RMQ with Shifts(线段树查询最小,暴力更新)
描述 In the traditional RMQ (Range Minimum Query) problem, we have a static array A. Then for each que ...
- TOJ 4325 RMQ with Shifts / 线段树单点更新
RMQ with Shifts 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 描述 In the traditional RMQ (Range M ...
- UVA 12299 RMQ with shifts
就是线段树的单点修改和区间查询. 然而输入打了一个小时才弄清楚. #include<iostream> #include<cstdio> #include<cstring ...
- UVA 12299 RMQ with Shifts(线段树:单点更新)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- RMQ问题(线段树+ST算法)
转载自:http://kmplayer.iteye.com/blog/575725 RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ ...
- UVA 11983 Weird Advertisement(线段树求矩形并的面积)
UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...
随机推荐
- android getDecorView()的作用
decorView是window中的最顶层view,可以从window中通过getDecorView获取到decorView.通过decorView获取到程序显示的区域,包括标题栏,但不包括状态栏.间 ...
- bootstrap scaffold框架
这是一段典型的html typical HTML file: <!DOCTYPE html> <html> <head> <title>Bootstra ...
- 不老的新丁 Python何以让人着迷
Python是一门美丽的语言.它简单易学,跨平台,而且运转良好.达成了许多Java一直求索的技术目标.一言以蔽之就是:其他的语言是与时代同 步,而Python则是未雨绸缪,而且计划得颇为出色.当然,这 ...
- 另外一种方式装win2008r2
装系统有很多方法,但是这种,我很少用. 注意第二个红圈处,是要启动的电话引导盘符.容易选择你的启动U盘,如果是后者,表现出的结果就是引导U盘不能引导,且安装的电脑也会显示ntdl丢失.当然,也可以解决 ...
- C# 使用PictureBox控件--点击切换图片
效果: 1. 2. 代码: private Boolean fals = true; /// <summary> /// 单击事件 /// </summary> /// < ...
- Qt实现不同Treewidget之间拖拽
拖拽是编程中经常要用到的,我这里主要是实习了Treewidget之间直接拖拽Item,按下Ctrl键的话是copy,不按Ctrl则是Move.以下是实现代码 class TreeItemMimeDat ...
- Docker学习笔记(4) — 开启Docker远程访问
默认情况下,Docker守护进程会生成一个socket(/var/run/docker.sock)文件来进程本地进程通信,而不会监听任何端口,因此只能在本地使用docker客户端或者使用Docker ...
- [置顶] think in java interview-高级开发人员面试宝典(八)
面经出了7套,收到许多读者的Email,有许多人说了,这些基础知识是不是为了后面进一步的”通向架构师的道路“做准备的? 对的,你们没有猜错,就是这样的,我一直在酝酿后面的”通向架构师的道路“如何开章. ...
- js入门——Dom基础
DOM=DocumentObject Model,文档对象模型. Dom有三个不同的部分. 1.核心DOM 也是最基础的文档结构的标准模型 2.XMLDOM 针对XML文档的标准模型 3.HTML D ...
- DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)
函数重载重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同.实际上,编译器是通过检测参数来确定需要调用的例程.下面是从VCL 的数学单元(Math Unit)中摘录的一 ...