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还是停留在模板水平,如果有更多应用的话还会在学的;

最新文章

  1. cmd 下切换目录
  2. 升级xcode7.0 第三方库不能用的解决方法(bitcode是什么鬼?)
  3. UIScrollView滚动视图
  4. 2016/09/21 java split用法
  5. uploadify+批量上传文件+java
  6. Project Euler 99:Largest exponential 最大的幂
  7. Yandex 2013Q(Atoms: There and Back Again-贪心+模拟+List)
  8. php_windows搭建
  9. JS —— 数组与字符串方法
  10. .net core建站踩坑记录
  11. 查找Oracle数据库中的重复记录
  12. web前端-----第一弹html
  13. 利用ffmpeg做视频解码的顺序
  14. Android开发技巧——PagerAdapter的再次简单封装
  15. net core体系-Standard-1概述
  16. VGG-16详解
  17. EL表达式与标签库
  18. shoi2017小结
  19. shell中脚本变量和函数变量的作用域
  20. 2018-2019-2 网络对抗技术 20165227 Exp2 后门原理与实践

热门文章

  1. [USACO 2011 Nov Gold] Cow Steeplechase【二分图】
  2. Linux环境下ZooKeeper集群环境搭建关键步骤
  3. Windowsforms 中 进程,线程
  4. IIS中不让下级应用程序继承主域名的web.config配置
  5. Spring数据访问2 - 通过JDBC访问数据库
  6. [转]Git分支管理策略
  7. 使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序
  8. [Windows Server 2008] IIS配置伪静态方法(Web.config模式的IIS rewrite)
  9. BotFramework学习-01
  10. OpenFlow_tutorial_4_Create_a_Learning_Switch