hdu 1754 (线段树)
2013-05-24 11:59
141 查看
点击打开链接
模版。。。。
模版。。。。
#include"stdio.h" #include"string.h" #define N 200005 struct tree { int x,y,mid; int count; }A[3*N]; int max(int x,int y) { return x>y?x:y; } void creat(int x,int y,int k) { A[k].x=x; A[k].y=y; A[k].mid=(x+y)/2; A[k].count=1; if(x==y)return ; creat(x,A[k].mid,2*k); creat(A[k].mid+1,y,2*k+1); return ; } void insert(int x,int y,int k) { if(A[k].x==A[k].y&&A[k].x==x) { A[k].count=y; return ; } if(A[k].mid<x) insert(x,y,k*2+1); else insert(x,y,k*2); A[k].count=max(A[2*k].count,A[2*k+1].count); return ; } int search(int x,int y,int k) { if(A[k].x==x&&A[k].y==y) { return A[k].count; } int ans; if(x>A[k].mid) ans=search(x,y,2*k+1); else if(y<=A[k].mid) ans=search(x,y,2*k); else ans=max(search(x,A[k].mid,2*k),search(A[k].mid+1,y,2*k+1)); return ans; } int main() { int n,m; int a,b,i; char s[2]; while(scanf("%d%d",&n,&m)!=-1) { creat(1,n,1); for(i=0;i<n;i++) { scanf("%d",&a); insert(i+1,a,1); } getchar(); for(i=0;i<m;i++) { scanf("%s %d%d",s,&a,&b); if(s[0]=='Q')printf("%d\n",search(a,b,1)); else if(s[0]=='U')insert(a,b,1); } } return 0; }
相关文章推荐
- HDU 1754 I Hate It(线段树区间求最值)
- HDU 1754 线段树 及其 入门知识
- HDU - 1754 I Hate It (线段树 单点更新区间查询)
- hdu 1754(线段树单节点更新)
- hdu 1754 线段树单点更新求最大值
- hdu 1754 线段树入门的题
- HDU 1754 I Hate It (线段树)
- kuangbin专题七 : B题 :HDU 1754 I Hate It(线段树单点更新区间查询最值)
- HDU 1754 I Hate It 线段树
- [HDU - 1754] I Hate It(线段树)
- HDU 1754 I Hate It(线段树:单点更新,求区间最大值)
- 文章标题 HDU 1754 : I Hate It (分块 、线段树)
- HDU1754 I Hate It(线段树基础题单节点更新区间查询)
- HDU 1754 B I Hate It 线段树 单点更新 区间最大值 模板
- hdu1754————I Hate It(线段树)
- HDU1754 I Hate It(线段树单点更新)
- HDU 1754 I Hate It (线段树 单点更新)
- hdu 1754 I Hate It (线段树)
- HDU-1754-I Hate It(线段树,简单,不过好像有点问题)
- HDU 1754 I Hate It(线段树,单点更新,线段查询)