因为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的更多相关文章

  1. HDU 1754 I Hate It 线段树单点更新求最大值

    题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...

  2. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

  3. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  4. HDU 1166 敌兵布阵(线段树单点更新,板子题)

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

  5. POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)

    Brainman Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10575   Accepted: 5489 Descrip ...

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

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

  7. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  8. HDUOJ----1166敌兵布阵(线段树单点更新)

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

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

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

随机推荐

  1. ASPX1

    表单提交 <!--表单:收集用户的数据.---> <form method="post" action="AddInfo.ashx"> ...

  2. AJPFX辨析continue与break的区别

    1.break : (1).结束当前整个循环,执行当前循环下边的语句.忽略循环体中任何其它语句和循环条件测试.(2).只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用br ...

  3. 数据库(数据库、表及表数据、SQL语句)

    数据库MYSQL 今日内容介绍 u MySQL数据库 u SQL语句 第1章 数据库 1.1 数据库概述 l 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储 ...

  4. 问题:java.sql.SQLException: No value specified for parameter 1

    解决方案:没有指定参数 String user = req.getParameter("user"); String pwd = req.getParameter("pw ...

  5. Android 虚拟导航挡住应用底部解决方案(屏幕底部的三个按键)

    我在华为P6测试机上测试,发现底部的三个虚拟按钮遮挡了我的应用.类似效果如:https://www.zhihu.com/question/35292413#answer-28473700 解决方案 在 ...

  6. Android studio 3.1.1 找不到DDMS

    先找到AndroidStudio配置的SDK路径: 在SDK的/tools/路径下[就是和配置ADB一样的路径]有个monitor.bat 的批处理文件: 鼠标连续点击两下monitor.bat这个批 ...

  7. Unity的stateMachineBehaviour

    Unity5新增的StateMachineBehaviour是对状态机的内置,确实方便了很多,这里记录它的两个问题: 1.如果正在执行的状态被打断,当前状态的OnStateExit不会被执行,该问题在 ...

  8. 2018.4.19 远程服务器重装系统之后ssh无法登陆问题

    当我们重装云服务器系统的时候输入ssh连接命令(ssh dc2-user@116.85.25.15)出现一下代码 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...

  9. linux程序安装及包管理

    程序包的封装类型: RPM软件包:扩展名为“.rpm”,使用rpm命令安装. DEB软件包:扩展名为“.deb”,使用DPKG包管理器. 源代码软件安装:程序员开发完成的原始代码,一般制作成“.tar ...

  10. javaweb基础(22)_Servlet+JSP+JavaBean实战登陆

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...