I Hate It(线段树基础)
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 45287 Accepted Submission(s): 17773
这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。
学生ID编号分别从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。
当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
Huge input,the C function scanf() will work better than cin
/*times memy
889ms 8584k
by orc
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int N = ;
int n,m;
struct node{
int lt,rt;
int mx;
}tree[ * N];
int a[N];
void build(int l,int r,int v)
{
tree[v].lt = l;
tree[v].rt = r;
if(l == r) {tree[v].mx = a[l];return;}
int m = (l + r) >> ;
build(l,m, * v);
build(m + ,r, * v + );
tree[v].mx = max(tree[ * v].mx,tree[ * v + ].mx);
}
void update(int v,int k,int val)//直接暴力更新
{
if(tree[v].lt == tree[v].rt)
{
if(tree[v].lt == k)
tree[v].mx = val;
return;
}
int m = (tree[v].lt + tree[v].rt) >> ;
if(k <= m) update(v * ,k,val);//更新左子树
else update(v * + ,k,val);//更新右子树
tree[v].mx = max(tree[v << ].mx,tree[(v << ) + ].mx);
//else tree[v >> 1].mx = max(tree[v].mx,tree[v + 1].mx);
}
int query(int v,int l,int r)
{
if(l == tree[v].lt && r == tree[v].rt) return tree[v].mx;
int m = (tree[v].lt + tree[v].rt) >> ;
if(r <= m) query(v * ,l,r);
else if(l > m) query(v * + ,l ,r);
else{
return max(query(v * ,l,m),query(v * + ,m + ,r));
}
}
void solve()
{
char C;
int A ,B;
for(int i = ; i <= n; ++i)
cin >> a[i];
build(,n,);
while(m--)
{
cin >> C;
cin >> A >> B;
if(C == 'Q')
{
cout << query(,A,B) <<endl;
continue;
}
else update(,A,B);
}
}
int main()
{
ios::sync_with_stdio();
while(cin >> n >> m) solve();
return ;
}
I Hate It(线段树基础)的更多相关文章
- Poj 3246 Balanced Lineup(线段树基础)
依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...
- P1198 [JSOI2008]最大数(线段树基础)
P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: ...
- HDU 1754 I Hate It(线段树基础应用)
基础线段树 #include<iostream> #include<cstdio> #include<cstring> using namespace std; # ...
- 线段树基础模板&&扫描线
线段树的单点更新+区间求和 hdu1166敌兵布阵 Input 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N<=),表示敌人有N个工兵营地 ,接下来有N个正整数,第i个正整 ...
- POJ 2777 线段树基础题
题意: 给你一个长度为N的线段数,一开始每个树的颜色都是1,然后有2个操作. 第一个操作,将区间[a , b ]的颜色换成c. 第二个操作,输出区间[a , b ]不同颜色的总数. 直接线段树搞之.不 ...
- hdu 1698 Just a Hook(线段树基础)
成段更新的线段树,加入了延时标记............ 线段树这种东西细节上的理解因人而异,还是要自己深入理解......慢慢来 #include <iostream> #include ...
- hdu 1166 敌兵布阵(线段树基础题)
学习线段树~~~~~~~~~~~~要好好理解 此题是单点更新的线段树,考虑基本的询问,更新. #include <iostream> #include <algorithm> ...
- HDU 6155 Subsequence Count(矩阵乘法+线段树+基础DP)
题意 给定一个长度为 \(n\) 的 \(01\) 串,完成 \(m\) 种操作--操作分两种翻转 \([l,r]\) 区间中的元素.求区间 \([l,r]\) 有多少个不同的子序列. \(1 \le ...
- hdu 1754 I Hate It 线段树基础题
Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求, ...
- [JSOI2008]最大数(线段树基础)
题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制: L 不超过当前数列的长度.(L > ...
随机推荐
- XLL 框架库中的函数
这个框架库,可以让编写 XLL 更加容易.包含了管理 XLOPER/XLOPER12 内存的简单函数,创建临时 XLOPER/XLOEPR12 ,强制调用回调函数 (Excel4,Excel4v,Ex ...
- iOS 没有安装对应客户端,不应显示对应的图标
现在很多APP为了让用户更加快捷方便注册,都会使用第三方进行登录,例如QQ/微信/淘宝等.但是上线审核被拒,大致会出现以下内容: Additionally, we found that your ap ...
- php数据访问增删查
1.先做一个登陆界面 <form action="chuli.php" method="post"> <div>用户名:<inpu ...
- [Android Pro] Normal Permissions
As of API level 23, the following permissions are classified as PROTECTION_NORMAL: ACCESS_LOCATION_E ...
- App Store审核被拒的23个理由
原文地址 iOS 应用提交审核要持续一周或者更久,在提交之前,我们一定要进行「自我审查」,避免被拒.ASO100 为大家收集整理了2015年 App Store 审核被拒的23个理由,并且附上官方拒绝 ...
- 二、JavaScript语言--JS基础--JavaScript进阶篇--JavaScript内置对象
1.什么事对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方 ...
- memarch
memached 是一个高性能的分布式对象缓存系统,用于动态web应用以减轻数库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态数据驱动网站的速度.memcached基于一个存储 ...
- JVM_Bind:8080 的解决办法【131031】
出错情况:运行 Tomcat 时报错 含义:8080 位置显示的端口被其他进程占用 解决方法: 方法1: 开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID ...
- NPOI读写Excel
1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...
- [Tools]迁移Confluence, JIRA, Fisheye
[背景] 原先的Confluence, JIRA, Fisheye都部署在一台服务器(192.168.200.203)上,导致这台机器太卡,公司又分配了两台虚拟机来分开这几个应用(192.168.20 ...