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. 利用autotools工具制作从源代码安装的软件 分类: linux 2014-06-02 23:27 340人阅读 评论(0) 收藏

    编写程序(helloworld.c)并将其放到一个单独目录. helloworld.c: #include<stdio.h> int main() { printf("hello ...

  2. iOS9导入高德地图报错App Transport Security has blocked...

    App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Te ...

  3. thinkphp3.2 + soap

    服务器配置 扩展libxml2下载地址:http://xmlsoft.org/downloads.html 在windows下的php.ini文件里 找到这一行代码(如没有则自行添加) extensi ...

  4. 抽象工厂模式和php实现

    抽象工厂模式: 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽象工厂模式又称为Kit模式,属于对象创建型模式. ...

  5. TCP/UDP套接字 java socket编程实例

    网络协议七层结构: 什么是Socket? socket(套接字)是两个程序之间通过双向信道进行数据交换的端,可以理解为接口.使用socket编程也称为网络编程,socket只是接口并不是网络通信协议. ...

  6. 详解java基础--抽象类、接口与多态

    抽象类.接口.多态都是面向对象中很基础的东西,我相信看到能本篇博客的人本不会再纠结它的基本定义了,本篇文章将尽量的更加深层次的挖掘其内涵,希望能对大家有帮助. 一.抽象类 1.形式 abstract ...

  7. java 对sql格式化

    public class SqlFormat{ public static void main(String[] args){ String sql=""; sqlFormat(s ...

  8. 浅谈CSS中的定位知识

    1,静态定位(static) 表示按照正常定位方案,元素盒按照在文档流中出现的顺序依次格式化: 2,相对定位(relative) 将移动元素盒,但是它在文档流中的原始空间会保留下来: 相对定位元素有如 ...

  9. svn 版本库信息修改

    root@hpcstack hpcweb]# svn info 路径: . URL: http://svn.pyindex.com/hpcweb 版本库根: http://svn.pyindex.co ...

  10. [Thu Summer Camp2016]补退选

    题目描述不说了. 题解: Trie+vector…… Trie存学生,vector存答案. 极为无脑但无脑到让人怀疑 代码: #include<cmath> #include<vec ...