问题 H: 老管家的忠诚

时间限制: 0 Sec  内存限制: 128 MB
提交: 54  解决: 21
[提交][状态][讨论版][命题人:外部导入]

题目描述

        老管家是一个聪明能干的人。他为财主工作了整整10年,财主为了让自已账目更加清楚。要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意。但是由于一些人的挑拨,财主还是对管家产生了怀疑。于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题。           在询问过程中账本的内容可能会被修改

输入

输入中第一行有两个数m,n表示有m(m< =100000)笔账,n表示有n个问题,n< =100000。 接下来每行为3个数字,第一个p为数字1或数字2,第二个数为x,第三个数为y 当p=1  则查询x,y区间 当p=2  则改变第x个数为y

输出

输出文件中为每个问题的答案。具体查看样例。

样例输入

10 3
1 2 3 4 5 6 7 8 9 10
1 2 7
2 2 0
1 1 10

样例输出

2 0

提示

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <map>
#include <queue>
#include<cmath>
#include <vector>
using namespace std;
typedef long long ll;
const ll maxn = <<;
const ll maxd = 1e8+;
const ll mod = ;
ll b[maxn];
ll date[maxn*-],n;
void init(ll nn)
{
n=;
while(n<nn)
{
n*=;
}
for(ll i=;i<=*n-;i++)
{
date[i]=mod;
}
}
void update(ll k,ll a)
{
k+=n-;
date[k]=a;
while(k>)
{
k=(k-)/;
date[k]=min(date[k*+],date[k*+]);
}
}
ll query(ll a,ll b,ll k,ll l,ll r)
{
if(r<=a||b<=l)
{
return mod;
}
if(a<=l&&r<=b)
{
return date[k];
}else
{
ll vl=query(a,b,k*+,l,(l+r)/);
ll vr=query(a,b,k*+,(l+r)/,r);
return min(vl,vr);
}
}
int main()
{
ll i,m,j,k,l;
scanf("%lld %lld",&j,&m);
init(j);
for(i=;i<j;i++)
{
scanf("%lld",&b[i]);
update(i,b[i]);
}
ll r,q;
for(i=;i<=m;i++)
{
scanf("%lld %lld %lld",&q,&l,&r);
if(q==)
{
update(l-,r);
b[l-]=r;
continue;
}
if(l>r)
{
swap(l,r);
}
if(l==r)
{
printf("%lld",b[l-]);
if(i<m)
{
printf(" ");
}else
{
printf("\n"); }
continue;
}
ll mm=;
printf("%lld",query(max(l-,mm),r,,,n));
if(i<m)
{
printf(" ");
}
}
return ;
}

问题 H: 老管家的忠诚(线段树)的更多相关文章

  1. 【原创】tyvj1038 忠诚 & 计蒜客 管家的忠诚 & 线段树(单点更新,区间查询)

    最简单的线段树之一,中文题目,不翻译.... 注释讲的比较少,这已经是最简单的线段树,如果看不懂真的说明最基础的理论没明白 推荐一篇文章http://www.cnblogs.com/liwenchi/ ...

  2. Tyvj1038 忠诚 (线段树)

    [Tyvj1038]忠诚 线段树   题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是 ...

  3. tyvj:1038 忠诚 线段树

    tyvj:1038 忠诚 Time Limit: 1 Sec  Memory Limit: 131072KiBSubmit: 9619  Solved: 3287 题目连接 http://www.ty ...

  4. 【Tyvj1038】忠诚 线段树

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  5. newcoder H肥猪(单调队列 / 线段树)题解

    题意: 小B来到了一个异世界,成为了肥猪之王. 在这个异世界,共有n种肥猪,编号分别为1,...,n. 小B希望集齐这n种肥猪. 召集肥猪有两种方式: 1. 花费a[i]的金币召唤一只编号为i的肥猪. ...

  6. HDU 2795 Billboard 【线段树维护区间最大值&&查询变形】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Time Limit: 20000/8000 MS (Java/Others) ...

  7. hdu 2795 Billboard(线段树单点更新)

    Billboard Time Limit: 20000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. CDOJ 1073 线段树 单点更新+区间查询 水题

    H - 秋实大哥与线段树 Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu Submit S ...

  9. 【洛谷P1816 忠诚】线段树

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

随机推荐

  1. 《DSP using MATLAB》Problem 5.36

    第1小题 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  2. 有关O_APPEND标志和lseek()的使用

    编程之路刚刚开始,错误难免,希望大家能够指出. O_APPEND表示以每次写操作都写入文件的末尾.lseek()可以调整文件读写位置. <<Linux/UNIX系统编程手册>> ...

  3. LeetCode – Number of Islands II

    A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand oper ...

  4. Python知识点整理,基础4 - 集合操作

  5. MySQL Partition--分区基础

    ================================================================================= Mysql在5.1版本时增加对分区表 ...

  6. 简单webpack plugin 开发

    重要是学习下怎么开发webpack plugin,同时记录下 插件模型 webpack 是一个插件,可以是javascript class ,或者具名 class 定义apply 方法 指定一个绑定到 ...

  7. sqler sql 转rest api 数据校验的处理

    早期版本(2.0 之前)使用rules 进行数据校验处理,2.0 之后进行了修改使用 validators,这样更加明确 参考格式   addpost {    // if any rule retu ...

  8. php 数组排序 按照某字段

    $arr=[     array(         'name'=>'小坏龙',         'age'=>28     ),     array(         'name'=&g ...

  9. 在单文件组件中,引入安装模块里的css的2种方式:script中引入、style中引入

    在单文件组件中,引入安装模块里的css的2种方式:script中引入.style中引入 1.script中引入 <script> import 'bulma/css/bulma.css' ...

  10. 纹理,这次没用Shader头文件,但是没有报“超出内存”的错误,不知道为什么

    #include <iostream> using namespace std; //using std::cout; using std::cin; using std::endl; # ...