UVa 12299 线段树 单点更新 RMQ with Shifts
因为shift操作中的数不多,所以直接用单点更新模拟一下就好了。
太久不写线段树,手好生啊,不是这错一下就是那错一下。
PS:输入写的我有点蛋疼,不知道谁有没有更好的写法。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std; const int maxn = + ;
const int maxnode = (maxn << );
const int INF = 0x3f3f3f3f; void scan(int& x)
{
x = ;
char c = ' ';
while(c < '' || c > '') c = getchar();
while(c >= '' && c <= '') { x = x * + c - ''; c = getchar(); }
} int qL, qR;
int p, v;
int n, Q;
int minv[maxnode]; int a[maxn]; void build(int o, int L, int R)
{
if(L == R) { scan(a[L]); minv[o] = a[L]; return ; }
int M = (L + R) / ;
build(o<<, L, M);
build(o<<|, M+, R);
minv[o] = min(minv[o<<], minv[o<<|]);
} void update(int o, int L, int R)
{
//if(v >= minv[o]) return ;
if(L == R) { minv[o] = v; return ; } int M = (L + R) / ;
if(p <= M) update(o<<, L, M);
else update(o<<|, M+, R);
minv[o] = min(minv[o<<], minv[o<<|]);
} int query(int o, int L, int R)
{
if(qL <= L && R <= qR) return minv[o];
int ans = INF;
int M = (L + R) / ;
if(qL <= M) ans = min(ans, query(o<<, L, M));
if(qR > M) ans = min(ans, query(o<<|, M+, R));
return ans;
} char op[]; int main()
{
while(scanf("%d%d", &n, &Q) == && n)
{
build(, , n);
while(Q--)
{
scanf("%s", op);
int l = strlen(op);
if(op[] == 'q')
{
int i = ;
qL = ;
while(i < l && op[i] >= '' && op[i] <= '') { qL = qL * + op[i] - ''; i++; }
while(i < l && (op[i] < '' || op[i] > '')) i++;
qR = ;
while(i < l && op[i] >= '' && op[i] <= '') { qR = qR * + op[i] - ''; i++; }
printf("%d\n", query(, , n));
}
else
{
vector<int> hehe; for(int i = ; i < l;)
{
while(i < l && (op[i] < '' || op[i] > '')) i++;
if(i >= l) break;
int x = ;
while(i < l && op[i] >= '' && op[i] <= '') { x = x * + op[i] - ''; i++; }
hehe.push_back(x);
} int sz = hehe.size();
for(int i = ; i < sz - ; i++)
{
v = a[hehe[i + ]];
p = hehe[i];
update(, , n);
}
v = a[hehe[]];
p = hehe[sz - ];
update(, , n); int t = a[hehe[]];
for(int i = ; i < sz - ; i++) a[hehe[i]] = a[hehe[i+]];
a[hehe[sz - ]] = t;
}
}
} return ;
}
代码君
UVa 12299 线段树 单点更新 RMQ with Shifts的更多相关文章
- HDU 1754 I Hate It 线段树单点更新求最大值
题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...
- HDU 1166 敌兵布阵(线段树单点更新)
敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...
- HDU 1166 敌兵布阵(线段树单点更新,板子题)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)
Brainman Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10575 Accepted: 5489 Descrip ...
- HDU 1166 敌兵布阵(线段树单点更新,区间查询)
描述 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...
- POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)
POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...
- HDUOJ----1166敌兵布阵(线段树单点更新)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
随机推荐
- vfp使用笔记
1:update数据,根据记录中某个字段的值,从另一个表中查询并填充数据 UPDATE cs2013yy SET cs2013yy.ksh=NVL((SELECT cs2013gkbm.ksh FRO ...
- nginx只允许域名访问网址,禁止ip访问
修改nginx配置 文件 在server段里插入如下正则: if ( $host != 'www.baidu.com') { return 403; } 说明:如果访问讨还不是www.baidu.co ...
- Distributed Transaction Coordinator(DTC)一些问题的解决方法
有时运行某个程序或者安装SQL Server时报错. 错误信息: 事务管理器不可用.(从 HRESULT 异常: 0x8004D01B) 启动服务Distributed Transaction Coo ...
- java入门第二章——java编程基础
习题 一.填空题 (p)1.java中的程序代码都必须在一个类中定义,类使用(class)关键字来定义. (p)2.布尔常量即布尔类型的两个值,分别是(true)和(false) (p18)3.jav ...
- 在openSUSE 13.1上用gem安装rails无反应: gem install rails
解决方案: gem install rails -V ....其实他本身在后台运行,白白的给他中断好多次,用-V这个选项就可以直接回显信息了
- cv2.threshold 阈值灰度
threshold函数的使用 图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果.在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大 ...
- 使用FileSystemWatcher组件监视日志文件
实现效果: 知识运用: FileSystemWatcher组件的Path属性 Filter属性 //要监视那些文件 默认为*.* Endinit方法 //结束在窗体上使用或有另一个组件使用的Fil ...
- bat文件设置环境变量
::获取管理员权限 @echo off%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute(" ...
- macbook secureCRT终端中文乱码的问题
最近mac用crt中文总是显示的是一串串问号, 而用自带的终端软件就不会出现乱码, 经过一番折腾暂时解决了这一问题, 方法如下: 1. 打开终端操作 sudo vim /etc/profile 在最后 ...
- PAT (Basic Level) Practise (中文)- 1012. 数字分类 (20)
http://www.patest.cn/contests/pat-b-practise/1012 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数 ...