NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询
RMQ with Shifts
-> Link1 <-
->
Link2 <-
以上两题题意是一样的,只不过数据范围有所改动,代码改一下数组大小直接水过;
思路:典型的线段数单点更新+区间查询,只不过题目改动了一下,没有直接给出更新数据和查询区间,而是用字符串输入,所以只能将数据提取出来再进行操作,这道题线段数能做那么用RMQ肯定也能做,而且可能还更简洁;过的人并不多,大神们快点去A了它吧;
#include<bits/stdc++.h>
using namespace std;
const int N=100000+10;
struct node
{
int l,r,mi;
} a[N<<2];
int s[N],n,m;
void build(int l,int r,int k)
{
a[k].l=l,a[k].r=r,a[k].mi=0;
if(l==r)
{
a[k].mi=s[l];
return ;
}
int mid=(l+r)/2;
build(l,mid,2*k);
build(mid+1,r,2*k+1);
a[k].mi=min(a[k*2].mi,a[k*2+1].mi);
}
void update(int x,int n,int k)
{
if(a[k].l==a[k].r&&a[k].l==x)
{
a[k].mi=n;
return ;
}
int mid=(a[k].l+a[k].r)/2;
if(x<=mid) update(x,n,2*k);
else update(x,n,2*k+1);
a[k].mi=min(a[k*2].mi,a[k*2+1].mi);
}
int query(int l,int r,int k)
{
if(a[k].l==l&&a[k].r==r)
return a[k].mi;
int mid=(a[k].l+a[k].r)/2;
a[k].mi=min(a[k*2].mi,a[k*2+1].mi);
if(r<=mid) return query(l,r,2*k);
else if(l>mid) return query(l,r,2*k+1);
return min(query(l,mid,2*k),query(mid+1,r,2*k+1));
}
int main()
{
int i;
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)
scanf("%d",&s[i]);
build(1,n,1);
char sb[120];
while(m--)
{
scanf("%s",sb);
int len=strlen(sb);
if(sb[0]=='q')
{
int x=0,y=0;
for(i=6; sb[i]!=','; i++)
x=x*10+(sb[i]-'0');//区间左端点;
for(i++; sb[i]!=')'; i++)
y=y*10+(sb[i]-'0');//右端点;
printf("%d\n",query(x,y,1));
}
else
{
int x=0,y=0,k=6,pos=0;
for(i=k; sb[i]!=','; i++)
x=x*10+(sb[i]-'0');//第一个x;
pos=s[x];
while(k!=len-1)
{
for(i++; sb[i]>='0'&&sb[i]<='9'; i++)//跳出的条件是sb[i]要么是','要么是')';
y=y*10+(sb[i]-'0');
update(x,s[y],1);
s[x]=s[y];//注意这里也要进行更新;
k=i;
x=y,y=0;
}
update(x,pos,1);
s[x]=pos;//小细节,注意;
}
}
return 0;
}
RMQ还是停留在模板水平,如果有更多应用的话还会在学的;
NYOJ-568/1012//UVA-12299RMQ with Shifts,线段树单点更新+区间查询的更多相关文章
- HDU.1166 敌兵布阵 (线段树 单点更新 区间查询)
HDU.1166 敌兵布阵 (线段树 单点更新 区间查询) 题意分析 加深理解,重写一遍 代码总览 #include <bits/stdc++.h> #define nmax 100000 ...
- BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 10374 Solved: 4535[Subm ...
- HDU 1166敌兵布阵+NOJv2 1025: Hkhv love spent money(线段树单点更新区间查询)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- HDU1166(线段树单点更新区间查询)
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1754.I Hate It-结构体版线段树(单点更新+区间查询最值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- CDOJ 1073 线段树 单点更新+区间查询 水题
H - 秋实大哥与线段树 Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu Submit S ...
- Who Gets the Most Candies? POJ - 2886(线段树单点更新+区间查询+反素数)
预备知识:反素数解析 思路:有了反素数的解法之后就是线段树的事了. 我们可以用线段树来维护哪些人被淘汰,哪些人没被淘汰,被淘汰的人的位置,没被淘汰的人的位置. 我们可以把所有人表示为一个[1,n]的区 ...
- TOJ 4325 RMQ with Shifts / 线段树单点更新
RMQ with Shifts 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 描述 In the traditional RMQ (Range M ...
- NBUT 1602 Mod Three(线段树单点更新区间查询)
[1602] Mod Three 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Please help me to solve this problem, if so, Liang ...
随机推荐
- bzoj2581 [USACO 2012 Jan Gold] Cow Run【And-Or Tree】
传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=110 传送门2:http://www.lydsy.com/JudgeOn ...
- Navicat无法连接Oracle数据库问题处理一例
需要通过Navicat连接Oracle数据库进行数据迁移,发现无法连接,报如下错误信息: 按照百度中的说明配置了正确的oci. 此时又报如下错误: 问题解决: 经测试发现与软件的版本有关系,本机的Or ...
- Spring @Resource、@Autowired、@Qualifier区别
@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入: @Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualif ...
- math数学函数
Console.WriteLine("Math.Sign(12)--->{0})", Math.Sign(12)) Console.WriteLine("math. ...
- 让px单位自动转换为rem的方法
开发工具: 编辑器:vscode; css预处理器:less;(无具体要求): 步骤: 1. vscode安装cssrem插件: 2. 修改css插件的默认配置,其默认转换p ...
- 镜像中的 Everything, GnomeLive ,KdeLive ,livecd ,NetInstall的区别?
everything: 对完整版安装盘的软件进行补充,集成所有软件 GnomeLive , GNOME桌面版 KdeLive , KDE桌面版 livecd 光盘上运行的系统 ,NetInstall ...
- iOS---小经验分享
1.字符串在block中得赋值 定义一个全局变量,<字符串>当这个字符串用copy修饰的时候,然后再在block中赋值,当在block块之外访问时,不能得到字符创的值.此时字符串应该设置为 ...
- 在JAVA中封装JSONUtils工具类及使用 (转)
import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util. ...
- jQuery动画处理
$(selector).hide(speed,callback);隐藏 $(selector).show(speed,callback);显示 $(selector).toggle(speed,cal ...
- java SSL 邮件发送
Properties props = new Properties(); props.put("mail.smtp.host", smtp); props.put("ma ...