又是一个线段树的应用,不过跟上一题(D-排兵布阵)不同的是,这次是求某段区间上的最值,而不是某段区间和。当然,数据更新是必须的。D题注释已经很详细了,所以这题注释少点。

大致题意:给你N个已经排好的学生成绩,然后有M条指令,输出对应指令的结果。指令有两种:

1.Q  i  j:询问i到j的最值

2.U  i  j:把学生编号为i的成绩改为j

输入输出格式:

Sample Input

5     6                    //第一行两个整数N,M,表示N个学生和M条指令( 0<N<=200000,0<M<5000 )

1  2  3  4  5           //第二行是N个学生的成绩(对应学生编号)

Q  1  5

U  3  6

Q  3  4

Q  4  5

U  2  9

Q  1  5

Sample Output

5

6

5

9

 #include<stdio.h>
#include<string.h> int max(int a,int b)//首先定义一个取最大值的函数
{
return a>b?a:b;
} struct tree
{
int l,r,s;
}; char s[];
int m,n,x,y;
tree t[];//一般存节点的数组是叶子节点的三倍就够了 void Init(int l,int r,int k)//构造线段树
{
t[k].l=l;
t[k].r=r;
if(l==r)//叶子节点
{
int x;
scanf("%d",&x);
t[k].s=x;//输入该叶子节点(学生)的分数
return ;
}
int mid=(l+r)/;
Init(l,mid,k*);//构造左子树
Init(mid+,r,k*+);//构造右子树
t[k].s=max(t[k*].s,t[k*+].s);//更新父节点数据(取最大值)
} void updata(int c,int x,int k)//数据的更新操作
{
if(t[k].l==t[k].r&&t[k].l==c)
{
t[k].s=x;
return ;
}
if(c<t[k].l||c>t[k].r)
return ;
updata(c,x,k*);
updata(c,x,k*+);
t[k].s=max(t[k*].s,t[k*+].s);
} int query(int l,int r,int k)//数据查询 注意范围落在哪个区间就行了
{
if(t[k].l==l&&t[k].r==r)
return t[k].s;
int mid=(t[k].l+t[k].r)/;
if(r<=mid)
return query(l,r,k*);
else if(l>=mid+)
return query(l,r,k*+);
else
return max(query(l,mid,k*),query(mid+,r,k*+));
} int main()
{
while(scanf("%d %d",&n,&m)!=EOF)
{
Init(,n,);
while(m--)
{
scanf("%s %d %d",&s,&x,&y);
if(s[]=='U')
updata(x,y,);
else
printf("%d\n",query(x,y,));
}
}
return ;
}

2016HUAS_ACM暑假集训2E - I Hate It的更多相关文章

  1. 2016HUAS_ACM暑假集训4C - 递推

    题目大意:给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形. 这里我们可以这样看: 对于行:假如是m单位长度,则长度为1的矩形有m个,长度为2的矩形有m-1个......长度为m的只有1 ...

  2. 2016HUAS_ACM暑假集训4A - 递推

    利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1).也就是从n个数里面选择m个数.按递增方式放在每一层循环. 杨辉三角+二项式定理,还真是挺有“意思”的一道题.说实话,非原创.见谅... ...

  3. 2016HUAS_ACM暑假集训4D - 计数,排列

    一个错排公式的基础应用. 大致题意:求n个数的错误排列方式.(每个都要错) 在这里先贴一下错排公式:D(1)=0:D(2)=1:D(n)=(n-1)*(D(n-1)+D(n-2)) 它的推导也非常有意 ...

  4. 2016HUAS_ACM暑假集训4M - 基础DP

    简单的0-1背包问题,大家都会做的.题意不想解释太多. 简述题目的案例及以几个关键 Sample Input 1                            //测试组数T 5 10     ...

  5. 2016HUAS_ACM暑假集训4K - 基础DP

    我不知道怎么用DP,不过DFS挺好用.DFS思路很明显,搜索.记录,如果刚好找到总价值的一半就说明搜索成功. 题目大意:每组6个数,分别表示价值1到6的物品个数.现在问你能不能根据价值均分. Samp ...

  6. 2016HUAS_ACM暑假集训4F - 数论

    这个题目,如果没找到方向,确实有点一头雾水.但是如果你找对方向了,AC是分分钟的事.答案就是看n和m是否有除1之外的公约数. 简单证明:设n和m最大公约数不是1,假设为p.n和m总可以化为一个数乘以k ...

  7. 2016HUAS_ACM暑假集训4B - 递推

    这种数学推理题目题意极其明显,在做的时候,可以多写几组,这样找起规律来会容易些.概括起来就是:题意简单暴力,案例毫无价值. 一个三角形最多可以把一个平面分成两部分,两个三角形最多是8(2+6)部分,而 ...

  8. 2016HUAS_ACM暑假集训3G - 还是畅通工程

    最小生成树,题目简单.套的Prim模板,其他的题目比较有意义. Sample Input 3                             //村庄个数1 2 1               ...

  9. 2016HUAS_ACM暑假集训3F - Jungle Roads

    这个题目属于最小生成树问题,可以用Prim,也可以用Kruskal(还没试).题意简单直接,给你一个图,求出它最小生成树的权值. 题目最有趣的地方就是图的顶点是字母,稍微处理一下就好了. Sample ...

随机推荐

  1. 将php网站移到CentOS 6.7上[一]:yum安装lamp环境

    最近应老师要求,将一个网站从51php上转移到学校提供的服务器上,之前对Linux没有了解,一切都在百度百度百度.于是发现很多步骤自己做过后就忘了,现将有效步骤记录下来,以供下次参考. 原51php上 ...

  2. 解决Cannot find MySQL header files under /usr/include/mysql的错误

    按照下面的步骤能成功,亲测.转帖,做笔记 编译php-5.5-6的mysql支持,出现Cannot find MySQL header files under /usr/include/mysql. ...

  3. 在caffe中使用hdf5的数据

    caffe默认使用的数据格式为lmdb文件格式,它提供了把图片转为lmdb文件格式的小程序,但是呢,我的数据为一维的数据,我也要分类啊,那我怎么办?肯定有办法可以转为lmdb文件格式的,我也看了一些源 ...

  4. 初试 Matlab 之去除水印

    这几天很痛苦地去学习了下用 Matlab 来处理图像,其实那些算法我觉得还不算很难理解,可是 Matlab 这种反人类的语法(可能对于我来说是这样吧,毕竟熟悉了 C++ / Java 的语法一时间很难 ...

  5. Deep Learning 8_深度学习UFLDL教程:Stacked Autocoders and Implement deep networks for digit classification_Exercise(斯坦福大学深度学习教程)

    前言 1.理论知识:UFLDL教程.Deep learning:十六(deep networks) 2.实验环境:win7, matlab2015b,16G内存,2T硬盘 3.实验内容:Exercis ...

  6. 使用easyui时 进入一个新页面 前要经过一个页面混乱的时候 才到正常的页面去

    var width = $(window).width(); var height = $(window).height(); var html = "<div id='loading ...

  7. json和xml数据的解析

    一 json数据 1一条json就像一个对象,也想像OC中的数组,且内嵌了很多键值对字典 {"name" : "jack", "age" : ...

  8. APP自动化测试中Monkey和 MonkeyRunner

    在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程步步执行测试,得到实际结果与期望结果的比较.在此过程中,为了节省人力.时间或硬件资源,提高测试效率,便引入了自动化测试的概念.自动化测 ...

  9. C#MongoDB使用实践

    9.5更新:更方便的启动命令 1)在D:\MongoDB中新建mongo.config文件,内容为 #启动mongod:mongod.exe --bind_ip 127.0.0.1 --logpath ...

  10. ArrayList其实就那么一回事儿之源码浅析

    ArrayList 算是常用的集合之一了,不知作为javaner的你有没在百忙之中抽出一点时间看看ArrayList的源码呢. 如果看了,你会觉得其实ArrayList其实就那么一回事儿,对吧,下面就 ...