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 ...
随机推荐
- Xcode7 使用AFNetWorking 报错 添加Security.framework
Undefined symbols for architecture x86_64: "_SecCertificateCopyData", referenced from: _AF ...
- hdu3433A Task Process( 二分dp)
链接 二分时间,在时间内dp[i][j]表示截止到第i个人已经做了j个A最多还能做多少个B #include <iostream> #include<cstdio> #incl ...
- 45 个非常有用的 Oracle 日期查询语句
日期/时间 相关查询 获取当前月份的第一天 运行这个命令能快速返回当前月份的第一天.你可以用任何的日期值替换 “SYSDATE”来指定查询的日期. SELECT TRUNC (SYSDATE, 'MO ...
- 开发一个 Web App 必须了解的那些事
在过去的一年里,我在从头开始开发我的第一个重要的Web应用.经验教会了很多以前不知道的东西,特别是在安全性和用户体验方面. 值得一提的是,我上一次尝试构建的任何合理复杂性是在2005年.所以,在安全防 ...
- 利用Wamp在本地搭建一个wordpress站点
原文链接:利用Wamp在本地搭建一个wordpress站点 有时候我们会想搭建一个自己的站点,可是由于只是想自己访问,就不是很想为这个站点在买一个服务器和域名,那我们可能首先就想到把自己电脑当做服务器 ...
- Android SDK镜像更新网速慢的解决问题
通过更换代理解决 Android SDK 在线更新镜像服务器资源:大连东软信息学院镜像服务器地址:http://mirrors.neusoft.edu.cn 端口:80北京化工大学镜像服务器地址:IP ...
- Python学习 Day 1-简介 安装 Hello world
简介 Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源 ...
- jQuery.ajax() 设置 Headers 中的 Accept 内容
jQuery.ajax() 如何设置 Headers 中的 Accept 内容 其实很简单,首先如果是常见类型,则请直接设置 dataType 属性 $.ajax({ dataType: &quo ...
- 通过SSDT HOOK实现进程保护和进程隐藏
---恢复内容开始--- 首先,我要说一件很重要的事,本人文采不好,如果哪里说的尴尬了,那你就尴尬着听吧...... SSDT HOOK最初貌似源于Rookit,但是Rookit之前有没有其他病毒使用 ...
- 迅为八核cortex a53开发板android/linux/Ubuntu系统
详情请点击了解:http://www.topeetobard.com 店铺:https://arm-board.taobao.com 核心板: 提供1G和2G内存版本,全机器焊接,杜绝手工,批量无忧. ...