题目链接:题意:在传统的RMQ的基础上加上一个操作:shift(i1,i2,i3...ik),表示将这些元素,依次向左移动一位(训练指南247页)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
const int maxn=100000+5;
int data[4*maxn],x[50],nsize,n,q;
char s[50]; void update(int k,int val)
{
k+=nsize-2;
data[k]=val;
while(k>0)
{
k=(k-1)/2;
data[k]=min(data[2*k+1],data[2*k+2]);
}
}//第k个位置改为val void build(int k,int l,int r)
{
MM(data,inf);
for(int i=l;i<r;i++)
{
scanf("%d",&data[nsize-2+i]);
update(i,data[nsize-2+i]);
}//直接读入节点的值,然后再向上更新
} int query(int k,int l,int r,int a,int b)
{
if(a<=l&&r<=b) return data[k];
else if(r>a&&l<b)
{
int x=query(2*k+1,l,(l+r)>>1,a,b);
int y=query(2*k+2,(l+r)>>1,r,a,b);
return min(x,y);
}
else return inf;
} int main()
{
while(~scanf("%d %d",&n,&q))
{
for(int i=0;;i++)
if((1<<i)>=n) {nsize=(1<<i);break;}//满二叉树的最下面一层 build(0,1,nsize+1); for(int k=1;k<=q;k++)
{
scanf("%s",s);
int len=strlen(s),cnt=0;
if(s[0]=='s')
{
int cnt=0;
for(int i=0;i<len;i++)
{
int temp=0,flag=0;
while(s[i]>='0'&&s[i]<='9')
{
temp=temp*10+s[i]-'0';
i++;
flag=1;
}
if(flag) x[++cnt]=temp;
}
int val=data[nsize-2+x[1]];
for(int i=1;i<=cnt-1;i++)
{
update(x[i],data[nsize-2+x[i+1]]);
}
update(x[cnt],val);
}
else if(s[0]=='q')
{
int cnt=0;
for(int i=0;i<len;i++)
{
int temp=0,flag=0;
while(s[i]>='0'&&s[i]<='9')
{
temp=temp*10+s[i]-'0';
i++;
flag=1;
}
if(flag) x[++cnt]=temp;
}
printf("%d\n",query(0,1,nsize+1,x[1],x[2]+1));
}
}
}
return 0;
}

  分析:看清题,字符串长度最多才30,直接暴力单点更新就好了,整理了下线段树模版,挑战的风格

真奇葩

UVA 12299 线段树 ( 单点跟新 , 区间查询)的更多相关文章

  1. UVa 12299 线段树 单点更新 RMQ with Shifts

    因为shift操作中的数不多,所以直接用单点更新模拟一下就好了. 太久不写线段树,手好生啊,不是这错一下就是那错一下. PS:输入写的我有点蛋疼,不知道谁有没有更好的写法. #include < ...

  2. HDU 3074.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模

    Multiply game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  3. HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和

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

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

    描述 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况 ...

  5. spoj QTREE - Query on a tree(树链剖分+线段树单点更新,区间查询)

    传送门:Problem QTREE https://www.cnblogs.com/violet-acmer/p/9711441.html 题解: 树链剖分的模板题,看代码比看文字解析理解来的快~~~ ...

  6. 校内模拟赛T5:连续的“包含”子串长度( nekameleoni?) —— 线段树单点修改,区间查询 + 尺取法合并

    nekameleoni 区间查询和修改 给定N,K,M(N个整数序列,范围1~K,M次查询或修改) 如果是修改,则输入三个数,第一个数为1代表修改,第二个数为将N个数中第i个数做修改,第三个数为修改成 ...

  7. hdu 1541 Stars(线段树单点更新,区间查询)

    题意:求坐标0到x间的点的个数 思路:线段树,主要是转化,根据题意的输入顺序,保证了等级的升序,可以直接求出和即当前等级的点的个数,然后在把这个点加入即可. 注意:线段树下标从1开始,所以把所有的x加 ...

  8. hdu 1166 敌兵布阵(线段树单点更新,区间查询)

    题意:区间和 思路:线段树 #include<iostream> #include<stdio.h> using namespace std; #define MAXN 500 ...

  9. 【原创】hdu 1166 敌兵布阵(线段树→单点更新,区间查询)

    学习线段树的第三天...真的是没学点啥好的,又是一道水题,纯模板,我个人觉得我的线段树模板还是不错的(毕竟我第一天相当于啥都没学...找了一整天模板,对比了好几个,终于找到了自己喜欢的类型),中文题目 ...

随机推荐

  1. poj2352(树状数组)

    题目链接:https://vjudge.net/problem/POJ-2352 题意:在直角坐标系中给出n个点的 (x,y),(0<=x,y<=32000),定义每个点的level为(x ...

  2. [转帖]影驰首发PCIe 4.0 SSD:群联AMD合作主控飚出5GB/s

    影驰首发PCIe 4.0 SSD:群联AMD合作主控飚出5GB/s https://www.cnbeta.com/articles/tech/851275.htm 硬件发展的真快.. AMD刚刚发布的 ...

  3. opencv滤镜-使用opencv实现各种图像滤镜特效

    图像处理-滤镜 链接:https://mangoroom.cn/opencv/image-processing-filter.html opencv滤镜-实现晕影vignetting效果 链接:htt ...

  4. MySQL数据库创建时间和更新时间错乱问题

    在数据中勾选create_time和update_time不为空可以解决更新记录时,create_time也被更新的毛病

  5. Git_初步了解

    Git入门篇 一:Git是什么?Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程: Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库 ...

  6. Nginx + Tomcat动静分离 (转)

    什么是动静分离 为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源比如图片,js,css等文件,我们可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时 ...

  7. centos 7下nginx搭建流媒体服务器【动态添加模块】

    1.安装nginx依赖包 yum install gcc gcc-c++ openssl-devel zlib-devel pcre pcre-devel yamdi 2.下载解压nginx_mod_ ...

  8. npm学习(二)之如何防止权限错误

    如何防止权限错误 如果您在尝试全局安装包时看到EACCES错误,请阅读本章.如果更改安装npm的目录,通常可以避免此错误.要做到这一点,要么使用版本管理器重新安装npm(推荐)或手动更改npm的默认目 ...

  9. java8之stream和lambda表达式

    JAVA 8 已经推出有一段时间了, 相比之前, 我们操作集合的方式应该是这样? 代码:List<String> list = new ArrayList<>(); list. ...

  10. Linux学习--第八天--acl、SetUID、SetGID、chattr、lsattr、sudo

    acl权限 文件只能有一个所属组 acl就是不管用户什么组了,直接针对某个文件给他特定权限. acl需要所在分区文件系统的支持. df -h #查看分区 dumpe2fs -h /dev/sda3 # ...