2016HUAS_ACM暑假集训2E - I Hate It
又是一个线段树的应用,不过跟上一题(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的更多相关文章
- 2016HUAS_ACM暑假集训4C - 递推
题目大意:给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形. 这里我们可以这样看: 对于行:假如是m单位长度,则长度为1的矩形有m个,长度为2的矩形有m-1个......长度为m的只有1 ...
- 2016HUAS_ACM暑假集训4A - 递推
利用组合公式C(n,m)=C(n-1,m)+C(n-1,m-1).也就是从n个数里面选择m个数.按递增方式放在每一层循环. 杨辉三角+二项式定理,还真是挺有“意思”的一道题.说实话,非原创.见谅... ...
- 2016HUAS_ACM暑假集训4D - 计数,排列
一个错排公式的基础应用. 大致题意:求n个数的错误排列方式.(每个都要错) 在这里先贴一下错排公式:D(1)=0:D(2)=1:D(n)=(n-1)*(D(n-1)+D(n-2)) 它的推导也非常有意 ...
- 2016HUAS_ACM暑假集训4M - 基础DP
简单的0-1背包问题,大家都会做的.题意不想解释太多. 简述题目的案例及以几个关键 Sample Input 1 //测试组数T 5 10 ...
- 2016HUAS_ACM暑假集训4K - 基础DP
我不知道怎么用DP,不过DFS挺好用.DFS思路很明显,搜索.记录,如果刚好找到总价值的一半就说明搜索成功. 题目大意:每组6个数,分别表示价值1到6的物品个数.现在问你能不能根据价值均分. Samp ...
- 2016HUAS_ACM暑假集训4F - 数论
这个题目,如果没找到方向,确实有点一头雾水.但是如果你找对方向了,AC是分分钟的事.答案就是看n和m是否有除1之外的公约数. 简单证明:设n和m最大公约数不是1,假设为p.n和m总可以化为一个数乘以k ...
- 2016HUAS_ACM暑假集训4B - 递推
这种数学推理题目题意极其明显,在做的时候,可以多写几组,这样找起规律来会容易些.概括起来就是:题意简单暴力,案例毫无价值. 一个三角形最多可以把一个平面分成两部分,两个三角形最多是8(2+6)部分,而 ...
- 2016HUAS_ACM暑假集训3G - 还是畅通工程
最小生成树,题目简单.套的Prim模板,其他的题目比较有意义. Sample Input 3 //村庄个数1 2 1 ...
- 2016HUAS_ACM暑假集训3F - Jungle Roads
这个题目属于最小生成树问题,可以用Prim,也可以用Kruskal(还没试).题意简单直接,给你一个图,求出它最小生成树的权值. 题目最有趣的地方就是图的顶点是字母,稍微处理一下就好了. Sample ...
随机推荐
- C语言细节——献给初学者(二)
C语言细节——献给初学者(二) 主题 循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...
- Android pulltorefresh使用
pulltorefresh插件可以轻松实现上拉下拉刷新,github.com上直接搜索进行下载. 布局文件: <RelativeLayout xmlns:android="http:/ ...
- JDBC连接执行MySQL存储过程报权限错误
今天在测试项目的时候 突然就报了一个错出来. User does not have access to metadata required to determine stored procedure ...
- C# 字符串转义和反转义
System.Text.RegularExpressions.Regex.Unescape(s) System.Text.RegularExpressions.Regex.Escape(s)
- Tomcat下安装solr6.x
1.官网上下载solr(http://lucene.apache.org/solr/)和tomcat(http://tomcat.apache.org/) 测试用到的版本:solr-6.2.1.apa ...
- 一个简单的数据查询显示jsp
以前使用jstl标签库只是使用core来显示一些数据,非常方便,今天看了下发现jstl还有其他的标签,使用都非常方便, 1.sql标签,可以直接访问数据库,后台代码都不需要了,这在某些时候非常适合使用 ...
- iOS开发UI篇—Button基础
iOS开发UI篇—Button基础 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状 ...
- git基本使用方法
在本地mac,通过终端命令进入要上传的项目文件夹,也就是.xcodeproj文件所在的目录: 1)echo "# SubmitLocalProject" >> READ ...
- Windows下gvim配置
Windows下gvim配置原作地:http://hi.baidu.com/leemoncc/blog/item/a6be15cf40d7ab31b600c806.html 0.准备软件及插件. (a ...
- 转发自AstralWind的博客(python正则表达式)
原文地址:http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python ...