博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj(2325)线段树
阅读量:6502 次
发布时间:2019-06-24

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

这里介绍另外一种解法,此题可以用线段树,可以用树状数组

其实这题求的都是下面的和左面的,线段树这种数组结构刚好可以满足,为什么呢?这里稍微解释下吧,也有助于以后的复习

看上面这个图,[1,1],[2,2]这样的叶节点表示题目的的图中的最下一层,而[4,5],[1,3]这样节点的value值是是其子节点之和,多以可以理解为在二维坐标系中是高于下面的节点的,其子节点都在它的左面,可能说的比较模糊,我也是想一会就明白了

1 #include
2 #include
3 4 using namespace std; 5 6 struct e{ 7 int l,r; 8 int cn; 9 }tree[70000];10 int level[15001];11 int n;12 int x[15001],y[15001];13 int maxx;14 15 void build(int l,int r,int p)16 {17 tree[p].l=l;18 tree[p].r=r;19 tree[p].cn=0;20 if(l
>1;23 build(l,mid,p*2);24 build(mid+1,r,p*2+1);25 }26 }27 28 void insert(int l,int p)29 {30 if(l==tree[p].l&&l==tree[p].r)31 {32 tree[p].cn++;33 return;34 }35 int mid=(tree[p].l+tree[p].r)>>1;36 if(l<=mid)37 insert(l,p*2);38 else39 insert(l,p*2+1);40 tree[p].cn++;41 }42 43 int find(int l,int r,int p)44 {45 if(l==tree[p].l&&r==tree[p].r)46 {47 return tree[p].cn;48 }49 int mid=(tree[p].l+tree[p].r)>>1;50 if(r<=mid)51 return find(l,r,2*p);52 if(l>mid) return find(l,r,2*p+1);53 else54 return find(l,mid,2*p)+find(mid+1,r,2*p+1);55 }56 57 58 void read()59 {60 // ifstream cin("in.txt");61 int i,j,k;62 cin>>n;63 for(i=1;i<=n;i++)64 {65 cin>>x[i]>>y[i];66 maxx=max(maxx,x[i]);67 }68 build(0,maxx,1);69 for(i=1;i<=n;i++)70 {71 level[find(0,x[i],1)]++;72 insert(x[i],1);73 }74 for(i=0;i

c++的输入输出是不行的,必须要用c的,否则过不了

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

你可能感兴趣的文章
Flume 读取实时更新的日志文件
查看>>
HDU 2049
查看>>
《Spring1之第十次站立会议》
查看>>
Unity Shader 噪声消融特效 - 剑灵死亡特效
查看>>
Eclipse 自动生成 Ant的Build.xml 配置文件
查看>>
添加一条信息到列表,如果重复就替换,
查看>>
C#基础第五天
查看>>
MEF 编程指南(六):导出和元数据
查看>>
宝明34
查看>>
python 小数相加报错 invalid literal for int() with base 10
查看>>
【ubuntu】linux链接库
查看>>
uva 12325 枚举暴力 b
查看>>
多线程问题(JVM重排序)
查看>>
LeetCode 459 Repeated Substring Pattern
查看>>
POJ 3268 Silver Cow Party
查看>>
进程线程及堆栈关系的总结
查看>>
Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo
查看>>
EMLS项目推进思考
查看>>
Eclipse快捷键 10个最有用的快捷键
查看>>
2018-2019-1 20165302 实验五 通讯协议设计
查看>>