HDU-2828(线段树创新)
来源:互联网 发布:产品宣传视频制作软件 编辑:程序博客网 时间:2024/05/14 12:36
题目其实还是挺难理解的,,我读了很多遍才读懂,,,悲哀呀...
摸到题目也是不知道怎么做...
更别说往线段树上想了,,根本就想不到呀....看了比人的代码后,还是云里雾里的,也不是很清楚,,,
但是自己能敲出来,其实这样是很悲哀的,,因为到下次还是不会,,,我会尽力理解的,,做题不要做数量,,,而是要做思想,如果成不了自己的东西,那么不好意思,你在浪费时间,
而你在题目上花的时间也就全部浪费了..
贴出代码:
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>int flag;struct Node{int a;int b;int num;int val;}tree[888888];int pos[200005];int val[200005];int temp[200005];void Buildtree(int i,int a,int b){tree[i].a=a;tree[i].b=b;tree[i].num=b-a+1;if(a==b)return;int mid=(a+b)>>1;Buildtree(i<<1,a,mid);Buildtree(i<<1|1,mid+1,b);}void update(int i,int pos,int val){tree[i].num--;if(tree[i].a==tree[i].b){tree[i].val=val;//printf("i==%d__val==%d\n",i,tree[i].val);return;}if(pos<tree[i<<1].num)update(i<<1,pos,val);elseupdate(i<<1|1,pos-tree[i<<1].num,val);}void getnum(int i){if(tree[i].a==tree[i].b){temp[flag++]=tree[i].val;//printf("i===%d_____val===%d\n",i,tree[i].val);return;}getnum(i<<1);getnum(i<<1|1);}int main(){int N;while(scanf("%d",&N)!=EOF){Buildtree(1,1,N);for(int i=1;i<=N;i++){scanf("%d%d",&pos[i],&val[i]);}//for(i=1;i<=10;i++)//{//printf("i==%d___a==%d___b=%d____num=%d___cal==%d\n",i,tree[i].a,tree[i].b,tree[i].num,tree[i].val);//}for(i=N;i>0;i--){update(1,pos[i],val[i]);}flag=0;getnum(1);for(i=0;i<N;i++){printf(i==N-1?"%d\n":"%d ",temp[i]);}}return 0;}
- HDU-2828(线段树创新)
- hdu 2828 Buy Tickets 线段树
- hdu 1754 线段树
- hdu 1754 线段树
- HDU 1698 线段树
- hdu 1754 线段树
- 【线段树】hdu 1754
- hdu-1166 线段树
- HDU-2688 线段树
- HDU 4027 线段树
- HDU-1166 线段树
- hdu 1166 线段树
- hdu 1754 线段树
- hdu 1754 线段树
- hdu 4027#线段树
- hdu 1754 线段树
- HDU-4351-线段树
- hdu 2795 线段树
- Iframe自适应高度
- 透过Bit Field(位字段)看内存
- C++读取bmp位图入门
- android单元测试
- S3C6410开发全纪录(三)《UBOOT中添加DM9000AE网卡驱动》
- HDU-2828(线段树创新)
- Hibernate--实现二级缓存
- 学习日记 04 正则表达式
- java连接C的动态连接库
- 超链接href直接调用action
- linux下GPRS测试程序
- fedora 17 安装中文拼音输入法
- 内聚
- 谈谈c++中的继承问题