解题报告 之 HDU5323 Solve this interesting problem
Description
Have you learned something about segment tree? If not, don’t worry, I will explain it for you.
Segment Tree is a kind of binary tree, it can be defined as this:
- For each node u in Segment Tree, u has two values:![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
and
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
.
- If![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
, u is a leaf node.
- If![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ee1ccb9b78bf66aad65ec640c8f37085.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
, u has two children x and y,with
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/61fade9aad0a78d86d3208455034de85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
,
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/61fade9aad0a78d86d3208455034de85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/09228fd2709d0d629ea94895d5f2f5cd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a7d2f8a208b0a894c86cbfafc5bb3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb027189f70438d5ecd4627f0f818998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/60c8a3eaac2a291077a199c19e1ad82a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04cd94cfc84a7ea579972edbca137cbb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb027189f70438d5ecd4627f0f818998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e3f420d38eb1b6e230fcbf29a6d432c3.png)
,
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d3e09acd2a05939b00f866693b1ac868.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/09228fd2709d0d629ea94895d5f2f5cd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a7d2f8a208b0a894c86cbfafc5bb3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb027189f70438d5ecd4627f0f818998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/60c8a3eaac2a291077a199c19e1ad82a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04cd94cfc84a7ea579972edbca137cbb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb027189f70438d5ecd4627f0f818998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e3f420d38eb1b6e230fcbf29a6d432c3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d46193b02c23b52df18c7160df6a7f24.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e55d414846558ea8e1501b5ff737c782.png)
,
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d3e09acd2a05939b00f866693b1ac868.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
.
Here is an example of segment tree to do range query of sum.
Given two integers L and R, Your task is to find the minimum non-negative n satisfy that: A Segment Tree with root node's value![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2120c810f33410e5cd83803ec4f61a26.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddd84074e0beafc0aac01ccd020b8079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddd84074e0beafc0aac01ccd020b8079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a7a90eece19ade838b116b18c9ed99dc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
and
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2120c810f33410e5cd83803ec4f61a26.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddd84074e0beafc0aac01ccd020b8079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddd84074e0beafc0aac01ccd020b8079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a7a90eece19ade838b116b18c9ed99dc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
contains a node u with
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
and
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
.
Segment Tree is a kind of binary tree, it can be defined as this:
- For each node u in Segment Tree, u has two values:
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
- If
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
- If
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ee1ccb9b78bf66aad65ec640c8f37085.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/61fade9aad0a78d86d3208455034de85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/61fade9aad0a78d86d3208455034de85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/09228fd2709d0d629ea94895d5f2f5cd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a7d2f8a208b0a894c86cbfafc5bb3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb027189f70438d5ecd4627f0f818998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/60c8a3eaac2a291077a199c19e1ad82a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04cd94cfc84a7ea579972edbca137cbb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb027189f70438d5ecd4627f0f818998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e3f420d38eb1b6e230fcbf29a6d432c3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d46193b02c23b52df18c7160df6a7f24.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d3e09acd2a05939b00f866693b1ac868.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/09228fd2709d0d629ea94895d5f2f5cd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a7d2f8a208b0a894c86cbfafc5bb3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb027189f70438d5ecd4627f0f818998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/60c8a3eaac2a291077a199c19e1ad82a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04cd94cfc84a7ea579972edbca137cbb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb027189f70438d5ecd4627f0f818998.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e3f420d38eb1b6e230fcbf29a6d432c3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d46193b02c23b52df18c7160df6a7f24.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e55d414846558ea8e1501b5ff737c782.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a22e580c04f29f0f25e4262eec591fd5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d3e09acd2a05939b00f866693b1ac868.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
Here is an example of segment tree to do range query of sum.
Given two integers L and R, Your task is to find the minimum non-negative n satisfy that: A Segment Tree with root node's value
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2120c810f33410e5cd83803ec4f61a26.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddd84074e0beafc0aac01ccd020b8079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddd84074e0beafc0aac01ccd020b8079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a7a90eece19ade838b116b18c9ed99dc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1b08ce66336b4f2b3a7b911c59c311d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2120c810f33410e5cd83803ec4f61a26.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddd84074e0beafc0aac01ccd020b8079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ddd84074e0beafc0aac01ccd020b8079.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a7a90eece19ade838b116b18c9ed99dc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d145744987ffd848d7874a11151ad68e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8ac43a8ef94befae925fd3a25fe23e85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2b203c1c015063a750958b22412a78ae.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
Input
The input consists of several test cases.
Each test case contains two integers L and R, as described above.
![](https://i-blog.csdnimg.cn/blog_migrate/1b08ce66336b4f2b3a7b911c59c311d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d11c95e88ab4c8b84819401a4bd9aa72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d11c95e88ab4c8b84819401a4bd9aa72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d11c95e88ab4c8b84819401a4bd9aa72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a22e580c04f29f0f25e4262eec591fd5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1b08ce66336b4f2b3a7b911c59c311d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a7d2f8a208b0a894c86cbfafc5bb3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04cd94cfc84a7ea579972edbca137cbb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b8cd87d3bf6865f2b28c70cc267bc213.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a7d2f8a208b0a894c86cbfafc5bb3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/60c8a3eaac2a291077a199c19e1ad82a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d9efe1ce21b2c8d4b2797ef8bce8879a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d11c95e88ab4c8b84819401a4bd9aa72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/48fb42b8e72338f077d46e9ff74ffd93.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1b08ce66336b4f2b3a7b911c59c311d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a22e580c04f29f0f25e4262eec591fd5.png)
Each test case contains two integers L and R, as described above.
![](https://i-blog.csdnimg.cn/blog_migrate/1b08ce66336b4f2b3a7b911c59c311d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d11c95e88ab4c8b84819401a4bd9aa72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e238b5b571c4309634b602eb993c0fe3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d11c95e88ab4c8b84819401a4bd9aa72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a2d0e26b052f5af05a628a38a69f913.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d11c95e88ab4c8b84819401a4bd9aa72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a22e580c04f29f0f25e4262eec591fd5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1b08ce66336b4f2b3a7b911c59c311d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/094f0c54ab74a17baaa3bd2c27e2cbb6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a7d2f8a208b0a894c86cbfafc5bb3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04cd94cfc84a7ea579972edbca137cbb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b8cd87d3bf6865f2b28c70cc267bc213.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1a7d2f8a208b0a894c86cbfafc5bb3a1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/60c8a3eaac2a291077a199c19e1ad82a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d9efe1ce21b2c8d4b2797ef8bce8879a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d11c95e88ab4c8b84819401a4bd9aa72.png)
![](https://i-blog.csdnimg.cn/blog_migrate/48fb42b8e72338f077d46e9ff74ffd93.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1b08ce66336b4f2b3a7b911c59c311d2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a22e580c04f29f0f25e4262eec591fd5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b503db96fe85a552479ddbd4b574df16.png)
Output
For each test, output one line contains one integer. If there is no such n, just output -1.
Sample Input
6 7 10 13 10 11
Sample Output
7 -1 12
分析:红果果的搜索,线段树区间的分配方法决定了向上反推的时候可能有四种情况,这样就要向四个方向搜索分别是
[l,r+len]
[l,r+len-1]
[l-len,r]
[l-len-1,r]
是因为区间长度的奇偶性造成的。
重要的剪枝是如果L已经小于0,或者已经小于length,那么则不可能是通过任何一个区间分出来的。那么停止搜索,其他的每次搜索到l==0的时候表示找到了一个新的满足要求的区间,则进行一次更新。第二个剪枝是如果r已经大于了现有的n。那么则再怎么搜索下去也不可能得到更小的答案了。
上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
ll n;
bool inline Check( ll l, ll r,ll mid)
{
if(l < 0) return false;
return true;
}
void dfs( ll l, ll r )
{
if(l == 0 && (n == -1 || n > r))
{
n = r;
return;
}
if(n != -1 && r >= n) return;
ll length = r - l + 1;
if(l < length) return;
ll nl = l - length;
if(Check( nl, r, l-1 ))
dfs( nl, r );
nl--;
if(Check( nl, r, l-1 ))
dfs( nl, r );
ll nr = r + length;
if(Check( l, nr, r ))
dfs( l, nr );
nr--;
if(Check( l, nr, r ));
dfs( l, nr );
}
int main()
{
ll l, r;
while(scanf( "%lld%lld", &l, &r ) == 2)
{
n = -1;
dfs( l, r );
printf( "%lld\n", n );
}
return 0;
}