题目链接:题意:在传统的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. 基于vant实现一个问卷调查

    实现背景 最近学习<vue实战>,第二篇进阶篇有一个练习 刚好最近在研究vue移动端框架vant 两者结合,实现这么个小项目 实现代码 新建 vue单文件 L0529L.vue <t ...

  2. 第八周课程总结-实验报告六(Java异常)

    理解异常的基本概念: 掌握异常处理方法及熟悉常见异常的捕获方法 实验要求 练习捕获异常.声明异常.抛出异常的方法.熟悉try和catch子句的使用. 掌握自定义异常类的方法 实验内容 编写一个类,在其 ...

  3. poj1061(扩展欧基里德定理)

    题目链接:https://vjudge.net/problem/POJ-1061 题意:在一个首位相接的坐标轴上,A.B开始时分别位于X,Y处,每个单位时间向右移动m,n米,问是否能相遇,坐标轴长L. ...

  4. js知识点——1

    onload 事件会在页面或图像加载完成后立即发生. document.write("内容")将在加载页面时输出 内容可以是什么,可以是一个标签,它输出的文件不能自动换行: < ...

  5. 3-app应用操作——Models.py和字段类型

    Models.py定义 每一个数据表对应一个model定义,model之间和java一样可以相互之间继承.所有的model都必须继承 from django.db import models#或间接继 ...

  6. 使用RSA算法对接口参数签名及验签

    在不同的服务器或系统之间通过API接口进行交互时,两个系统之间必须进行身份的验证,以满足安全上的防抵赖和防篡改. 通常情况下为了达到以上所描述的目的,我们首先会想到使用非对称加密算法对传输的数据进行签 ...

  7. Elasticsearch入门教程(二):Elasticsearch核心概念

    原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:ht ...

  8. RabbitMQ入门教程(十五):普通集群和镜像集群

    原文:RabbitMQ入门教程(十五):普通集群和镜像集群 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.c ...

  9. java json对象转换

    引入的jar包: commons-beanutils-1.9.2.jar commons-collections-3.2.1.jar commons-lang-2.6.jar commons-logg ...

  10. ELK-全文检索技术-使用总结

    一.概念 1.1 基础概念 ELK: 是ElasticSearch,LogStash以及Kibana三个产品的首字母缩写 lucene : apache 的全文搜索引擎工具包 elasticsearc ...