I Hate It
来源:互联网 发布:电脑乐器演奏软件 编辑:程序博客网 时间:2024/05/19 08:03
下面是wrong answer的代码:however,I have found where I am wrong.果然是数组问题,自己写的模板没问题,按照我这样写每次都要刷新一遍segtree数组为0,否则的话前面遗留的数据会让后面比较max的时候出错,然后我就AC了!
<pre name="code" class="cpp">#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int Maxn = 200000 + 5;int a[Maxn];struct seg{int l,r,Max;}segtree[Maxn*4];void build(int node,int l,int r){ segtree[node].l=l;segtree[node].r=r; if(l==r) { segtree[node].Max=a[l];return;}else{int mid=(l+r)>>1; build(node<<1,l,mid); build(node<<1|1,mid+1,r); segtree[node].Max=max(segtree[node<<1].Max,segtree[node<<1|1].Max);}}int find_max(int node,int x,int y){if(segtree[node].l==x&&segtree[node].r==y)return segtree[node].Max;if(segtree[node<<1].r>=y){return find_max(node<<1,x,y);}else if(segtree[node<<1|1].l<=x){return find_max(node<<1|1,x,y);}else{int mid = segtree[node].l + segtree[node].r;mid>>=1;return max(find_max(node<<1,x,mid) , find_max(node<<1|1,mid+1,y));}}void update(int node,int x,int y)//自己创作的模版,只要把这个改成标准的模版就能过了 {if(segtree[node].l<=x&&segtree[node].r>=x){if(segtree[node].l==segtree[node].r) { segtree[node].Max=y;return;}else{ update(node<<1,x,y); update(node<<1|1,x,y); segtree[node].Max=max(segtree[node<<1].Max,segtree[node<<1|1].Max);}}elsereturn;}int main(){int n,m,x,y;char ope[2];while(scanf("%d%d",&n,&m)!=EOF){memset(segtree,0,sizeof(segtree));//就是这个地方,每次都要完完整整地刷新一遍segtree,因为我的更新操作是先向下探再判断的for(int i=0;i<n;i++) { scanf("%d",&a[i]); } build(1,0,n-1); while(m--) { scanf("%s",&ope); if(ope[0]=='Q') { scanf("%d%d",&x,&y); printf("%d\n",find_max(1,x-1,y-1));} else { scanf("%d%d",&x,&y); update(1,x-1,y);}}} return 0;}
这个是我AC的模版:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int Maxn = 200000 + 5;int a[Maxn];struct seg{int l,r,Max;}segtree[Maxn*4];void build(int node,int l,int r){ segtree[node].l=l;segtree[node].r=r; if(l==r) { segtree[node].Max=a[l];return;}else{int mid=(l+r)>>1; build(node<<1,l,mid); build(node<<1|1,mid+1,r); segtree[node].Max = max(segtree[node<<1].Max, segtree[node<<1|1].Max);}}int find_max(int node,int x,int y){if(segtree[node].l==x&&segtree[node].r==y)return segtree[node].Max;if(segtree[node<<1].r>=y){return find_max(node<<1,x,y);}else if(segtree[node<<1|1].l<=x){return find_max(node<<1|1,x,y);}else{int mid = segtree[node].l + segtree[node].r;mid>>=1;return max(find_max(node<<1,x,mid) , find_max(node<<1|1,mid+1,y));}}void refreash(int node,int x,int y){if(segtree[node].l==x&&segtree[node].r==x) { segtree[node].Max=y;return;}if(segtree[node<<1].r >= x) refreash(node<<1,x,y);else refreash(node<<1|1,x,y); segtree[node].Max=max(segtree[node<<1].Max,segtree[node<<1|1].Max);}int main(){int n,m,x,y;char ope[3];while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<n;i++) { scanf("%d",&a[i]); } build(1,0,n-1); while(m--) { scanf("%s",&ope); if(ope[0]=='Q') { scanf("%d%d",&x,&y); printf("%d\n",find_max(1,x-1,y-1));} else { scanf("%d%d",&x,&y); refreash(1,x-1,y);}}} return 0;}
0 0
- I Hate It
- hdu1754 I Hate It
- HDU1754 I Hate It
- BIT1083 I Hate It
- HDU1754:I Hate It
- HDU1754--I Hate It
- HDU1754 I hate it
- I Hate It tzc
- hdu_1754 I Hate It
- hdu1754 I Hate It
- HDU1754:I Hate It
- I Hate It
- hdu1754 I Hate It
- I Hate It
- I Hate It
- hdu1754 I Hate It
- hdu1754 I Hate It
- hdu1754 I Hate It
- const修饰函数参数,返回值,成员函数
- pixhawk make文件分析
- urllib2的用法
- MySql外键学习总结
- myeclipse注释模板修改
- I Hate It
- 大数减法
- 开启简单的laravel5 MVC模式
- Linux上安装 wordpress(apache,php,mysql)
- 反射还能这么玩?
- CSS 选择器
- FineUI EF6 数据库分页查询 页面说明
- Node.js和MongoDB——从MongoJS开始
- CentOS下shadowsocks-libev一键安装脚本