RMQ with Shifts

时间限制:1000 ms  |  内存限制:65535 KB
难度:3

->  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,线段树单点更新+区间查询的更多相关文章

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

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

  2. BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 10374  Solved: 4535[Subm ...

  3. HDU 1166敌兵布阵+NOJv2 1025: Hkhv love spent money(线段树单点更新区间查询)

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

  4. HDU1166(线段树单点更新区间查询)

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

  5. HDU 1754.I Hate It-结构体版线段树(单点更新+区间查询最值)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. CDOJ 1073 线段树 单点更新+区间查询 水题

    H - 秋实大哥与线段树 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit S ...

  7. Who Gets the Most Candies? POJ - 2886(线段树单点更新+区间查询+反素数)

    预备知识:反素数解析 思路:有了反素数的解法之后就是线段树的事了. 我们可以用线段树来维护哪些人被淘汰,哪些人没被淘汰,被淘汰的人的位置,没被淘汰的人的位置. 我们可以把所有人表示为一个[1,n]的区 ...

  8. TOJ 4325 RMQ with Shifts / 线段树单点更新

    RMQ with Shifts 时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 描述 In the traditional RMQ (Range M ...

  9. NBUT 1602 Mod Three(线段树单点更新区间查询)

    [1602] Mod Three 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Please help me to solve this problem, if so, Liang ...

随机推荐

  1. 小心我“DIR”溢出你!

    转自https://blog.csdn.net/wql19881207/article/details/6300760 https://blog.csdn.net/wql19881207/articl ...

  2. java 字符串截取的几种方式

    1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的性能损耗,因为分析正则非常耗时. String str = " ...

  3. CF932C Permutation Cycle

    思路: 构造. 实现: #include <bits/stdc++.h> using namespace std; ]; int main() { int n, a, b; while ( ...

  4. LoadRunner 11中Record无法自动生成脚本——解决办法

    [问题描述] 安装loadRunner 11, 使用IE为默认浏览器,打开一个页面进行脚本录制:录制完成后,无法生成脚本. [问题现象] 控制台输出如下: ****** Start Log Messa ...

  5. NOT IN、NOT EXISTS的相关子查询改用LEFT JOIN--sql2000性能优化

    参考文章:SQL SERVER性能优化综述(很好的总结,不要错过哦) 数据库:系统数据库 子查询的用法 子查询是一个 SELECT 查询,它嵌套在 SELECT.INSERT.UPDATE.DELET ...

  6. Importing Objective-C into Swift

    Overview You can use Objective-C and Swift files together in a single project, no matter which langu ...

  7. Java8新特性 Stream流式思想(一)

    遍历及过滤集合中的元素使用传统方式遍历及过滤集合中的元素package cn.com.zq.demo01.Stream.test01.Stream; import java.util.ArrayLis ...

  8. oauth 理解

    单点登录 对授权码模式的解读. 1. 用户访问客户端,客户端将请求认证服务器. 2. 用户选择是否给予客户端授权 3.用户授权后,认证服务器将用户导向客户端事先定义好的重定向的地址,同时会附上一个授权 ...

  9. WPF知识点--自定义Button(ControlTemplate控件模板)

    ControlTemplate是一种控件模板,可以通过它自定义一个模板来替换掉控件的默认模板以便打造个性化的控件. ControlTemplate包含两个重要的属性:VisualTree 该模板的视觉 ...

  10. 扩展IHttpHandler

    前面提到当请求进入到IIS,IIS转发给ISAPI后会根据文件的后缀名来决定将请求转发给对应的处理程序进行处理,当然一大部分的处理都是交给了AspNet_ISAPI 了.但是,AspNet_ISAPI ...