HDU
来源:互联网 发布:怎么通过网络挣钱 编辑:程序博客网 时间:2024/06/06 02:24
题目链接:https://vjudge.net/problem/HDU-1754
题意略,详见上题目链接。
分析:区间修改与查询的题目,线段树求解,单点替换,区间最值。
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <cmath>#define L(u) (u<<1)#define R(u) (u<<1|1)using namespace std;const int maxn=200005;int a[maxn];int ans;struct Node{ int l,r; int _max;}node[maxn<<2];void Pushup(int u){ node[u]._max=max(node[L(u)]._max,node[R(u)]._max); return;}void Build(int u,int left,int right){ node[u].l=left; node[u].r=right; if(left==right){ node[u]._max=a[left]; return; } int mid=(left+right)>>1; Build(L(u),left,mid); Build(R(u),mid+1,right); Pushup(u);}void Update(int u,int ID,int score){ if(node[u].l==node[u].r){ node[u]._max=score; return; } int mid=(node[u].l+node[u].r)>>1; if(mid>=ID) Update(L(u),ID,score); else Update(R(u),ID,score); Pushup(u);}void Quary(int u,int left,int right){ if(left==node[u].l&&node[u].r==right) { ans=max(ans,node[u]._max); return; } int mid=(node[u].l+node[u].r)>>1; if(mid>=right) Quary(L(u),left,right); else if(mid<left) Quary(R(u),left,right); else { Quary(L(u),left,mid); Quary(R(u),mid+1,right); } return;}int main() { //freopen("in.txt", "r", stdin); int n,m; while(~scanf("%d%d",&n,&m)){ for(int i=1;i<=n;i++) scanf("%d",&a[i]); Build(1,1,n); char c; int x,y; while(m--){ ans=0; scanf(" %c%d%d",&c,&x,&y); if(c=='U') Update(1,x,y); else{ Quary(1,x,y); printf("%d\n",ans); } } } return 0;}
阅读全文
0 0
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- HDU
- 基姆拉尔森公式计算周几的C语言实现方法
- 解决Error:Bootstrap dropdown require Popper.js (https://popper.js.org)
- Flask零基础到项目实战(七)请求方法、g对象和钩子函数
- Hadoop学习笔记 1
- 不同领域的人们是怎样使用思维导图的(下)
- HDU
- NIO学习之Selector,SelectionKey与客户端与服务端通信简单实现(1)
- mongoose
- Hdu 1231 最大连续子序列
- Android 根据Uri删除文件
- 使用ViewPager实现顶部tabbar切换界面
- 中电投-镇宁3号集合资产管理计划
- Android之bitmap的使用
- 一、storm基础概念