首页 > 代码库 > 51Nod—1174 区间中最大的数 线段树模版
51Nod—1174 区间中最大的数 线段树模版
在大佬们题解的帮助下算是看懂了线段树吧。。。在这mark下防一手转头就忘。
#include<iostream> #include<stdio.h> using namespace std; struct ki { int m,l,r; }tree[40005]; int ans=-1,a[10005]; void build(int n,int l,int r) { tree[n].l=l; tree[n].r=r; if(l==r) { tree[n].m=a[l];return; } else { build(n*2,l,(l+r)/2); build(n*2+1,(l+r)/2+1,r); tree[n].m=tree[n*2].m>tree[n*2+1].m?tree[n*2].m:tree[n*2+1].m; } } void find(int n,int a,int b) { if(a<=tree[n].l&&b>=tree[n].r) ans=tree[n].m>ans?tree[n].m:ans;//注意a,b,r,l的关系!!! else if(a>tree[n].r||b<tree[n].l) return; else { find(n*2,a,b); find(n*2+1,a,b); } } int main() { int n,m,i,j,r,l; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); build(1,1,n); scanf("%d",&m); while(m--) { scanf("%d%d",&l,&r); ans=-1; l++;r++; find(1,l,r); printf("%d\n",ans); } }
哼叽~
51Nod—1174 区间中最大的数 线段树模版
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。