博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1754
阅读量:7072 次
发布时间:2019-06-28

本文共 3206 字,大约阅读时间需要 10 分钟。

线段树的问题,不知道为什么我的代码老是runtime error ,哪位大牛能告诉我啊

#include 
int max(int d,int b)//这里如果用inline会加速好多啊{ return d>b?d:b;}#define MAXN 2000000int a[MAXN+5];struct node{ int left; int right; int sum;} b[MAXN*2];void build(int left , int right , int i)//为left,right ,sum赋值{ int mid; b[i].left=left; b[i].right=right; if(left==right) { b[i].sum=a[left]; return ; } mid=(left+right)/2; build(left,mid,2*i); build(mid+1,right,2*i+1); b[i].sum=max(b[2*i].sum , b[2*i+1].sum);}void Update(int id,int value,int i){ if(b[i].left==b[i].right) { b[i].sum=value; return ; } int mid =(b[i].left+b[i].right)/2; if(mid>=id) Update(id,value,2*i); if(id>mid) Update(id ,value,2*i+1); b[i].sum=max(b[i*2].sum , b[2*i+1].sum);//注意更新的时候不仅更新子节点,还要更新父节点}int Query(int left, int right,int i){ int mid; if(b[i].left==left && b[i].right ==right) return b[i].sum; mid=(b[i].left+b[i].right)/2; if(right<=mid) return Query(left,right,2*i); if (left>mid ) return Query(left,right,2*i+1); if(left<=mid && mid

另外附一个能A的

1 #include 
2 #include
3 using namespace std; 4 5 const int MAXN=2000000; 6 7 int n,m,a[MAXN+5]; 8 9 struct tree 10 { 11 int l,r; 12 13 int v; 14 15 }trees[MAXN*2]; 16 17 int max(int k,int l) 18 { 19 return k>l?k:l; 20 } 21 22 void buildtree(int rs,int l,int r) 23 { 24 //printf("%d %d %d\n",rs,l,r); 25 trees[rs].l=l; 26 trees[rs].r=r; 27 if(r==l) 28 { 29 trees[rs].v=a[l]; 30 return ; 31 } 32 33 int mid=(l+r)/2; 34 35 buildtree(rs*2,l,mid); 36 buildtree(rs*2+1,mid+1,r); 37 38 trees[rs].v=max(trees[rs*2].v,trees[rs*2+1].v); 39 } 40 41 void update(int rs,int k,int l) 42 { 43 //printf("%d %d %d %d %d\n",rs,k,l,trees[rs].l,trees[rs].r); 44 45 if(trees[rs].l==k&&trees[rs].r==k) 46 { 47 trees[rs].v=l; 48 return ; 49 } 50 51 int mid=(trees[rs].l+trees[rs].r)/2; 52 53 if(k<=mid)update(rs*2,k,l); 54 if(k>mid)update(rs*2+1,k,l); 55 56 trees[rs].v=max(trees[rs*2].v,trees[rs*2+1].v); 57 } 58 59 int querry(int rs,int l,int r) 60 { 61 //printf("%d %d %d\n",rs,l,r); 62 if(trees[rs].l==l&&trees[rs].r==r) 63 return trees[rs].v; 64 65 int mid=(trees[rs].l+trees[rs].r)/2; 66 67 if(r<=mid)return querry(rs*2,l,r); 68 if(l>mid)return querry(rs*2+1,l,r); 69 if(l<=mid&&r>mid) 70 return max(querry(rs*2,l,mid),querry(rs*2+1,mid+1,r)); 71 72 return 0; 73 } 74 75 int main() 76 { 77 int i,ac,bc; 78 79 char c; 80 81 while(scanf("%d%d",&n,&m)!=EOF) 82 { 83 for(i=1;i<=n;i++) 84 scanf("%d",&a[i]); 85 86 buildtree(1,1,n); 87 88 for(i=1;i<=m;i++) 89 { 90 getchar(); 91 92 scanf("%c%d%d",&c,&ac,&bc); 93 94 if(c=='Q') 95 printf("%d\n",querry(1,ac,bc)); 96 else 97 update(1,ac,bc); 98 } 99 }100 101 return 0;102 }

转载于:https://www.cnblogs.com/devil-91/archive/2012/08/02/2619316.html

你可能感兴趣的文章
1.ASP.NET MVC使用EPPlus,导出数据到Excel中
查看>>
redis学习笔记
查看>>
ios UIApplocation 中APP启动方式
查看>>
推送知识点2
查看>>
css中import与link用法区别
查看>>
jQuery拖动剪裁图片作为头像
查看>>
Android 5.0 全新的动画
查看>>
MGW——美团点评高性能四层负载均衡
查看>>
iOS根据网络图片的size大小设置UIImageView的大小
查看>>
[Ramda] Curry and Uncurry Functions with Ramda
查看>>
JavaScript的arguements
查看>>
OpenGL中的二维编程——从简单的矩形开始
查看>>
转入墙内:SAS HBA crossflashing or flashing to IT mode, Dell Perc H200 and H310
查看>>
最小联结词组
查看>>
HashMap,Hashtable,ConcurrentHashMap 和 synchronized Map 的原理和区别
查看>>
Flask 5 模板1
查看>>
ip_conntrack table full dropping packet解决方案
查看>>
微信小程序把玩(二十二)action-sheet组件
查看>>
【转】 android中的文件操作详解以及内部存储和外部存储
查看>>
LINUX系统安装MYSQL命令
查看>>