| 题目名称 | 1763. [国家集训队2012]middle |
|---|---|
| 输入输出 | nt2012_middle.in/out |
| 难度等级 | ★★★☆ |
| 时间限制 | 3000 ms (3 s) |
| 内存限制 | 1024 MiB |
| 测试数据 | 20 |
| 题目来源 |
|
| 开放分组 | 全部用户 |
| 提交状态 | |
| 分类标签 | |
| 分享题解 |
| 通过:35, 提交:74, 通过率:47.3% | ||||
|
|
100 | 3.474 s | 8.48 MiB | C++ |
|
|
100 | 4.926 s | 8.17 MiB | C++ |
|
|
100 | 5.199 s | 98.22 MiB | C++ |
|
|
100 | 5.537 s | 0.62 MiB | C++ |
|
|
100 | 5.591 s | 0.56 MiB | C++ |
|
|
100 | 5.701 s | 382.90 MiB | C++ |
|
|
100 | 5.714 s | 8.71 MiB | C++ |
|
|
100 | 5.837 s | 23.77 MiB | C++ |
|
|
100 | 5.904 s | 8.17 MiB | C++ |
|
|
100 | 6.253 s | 12.83 MiB | C++ |
| 关于 middle 的近10条评论(全部评论) | ||||
|---|---|---|---|---|
|
才两个log,常数有这么大吗?$O(nlogn+qlog^{2}n)$
| ||||
|
写代码时头脑最好清楚些,否则写时犯的错很难调出来,而且不好拍出来。。。我每一次都要拍几百组才能拍出错23333。
| ||||
|
脑残错误调了两个多小时,我没救了= =
| ||||
|
无法逃离的大常数……
| ||||
|
为什么我的常数总是这么大TUT
丽洁只给了五组数据(这里的2~6),余下的是我自己造的 linux下一定要注意下标-1的问题,因为这个问题在windows下很可能显示不出来……另外,对NODE类重载加号来实现线段树的区间信息合并(这样不管查询什么都只需要写一个query)是一个有趣的思路,但它貌似和“下标-define表示法”风格不太一致……所以就这样了 | ||||
|
我会使用一些方式强制你在线
好残暴!
2014-10-23 18:08
1楼
| ||||
nt2012_middle.in
输出文件:nt2012_middle.out
简单对比一个长度为 $n$ 的序列 $a$,设其排过序之后为 $b$,其中位数定义为 $b_{n/2}$,其中 $a,b$ 从 $0$ 开始标号,除法下取整。
给你一个长度为 $n$ 的序列 $s$。
回答 $Q$ 个这样的询问:$s$ 的左端点在 $[a,b]$ 之间,右端点在 $[c,d]$ 之间的子区间中,最大的中位数。
其中 $a<b<c<d$。
位置也从 $0$ 开始标号。
我会使用一些方式强制你在线。
第一行序列长度 $n$。
接下来 $n$ 行按顺序给出 $a$ 中的数。
接下来一行 $Q$。
然后 $Q$ 行每行 $a,b,c,d$,我们令上个询问的答案是 $x$(如果这是第一个询问则 $x=0$)。
令数组 $q=\{(a+x)\bmod n,(b+x)\bmod n,(c+x)\bmod n,(d+x)\bmod n\}$。
将 $q$ 从小到大排序之后,令真正的要询问的 $a=q_0$,$b=q_1$,$c=q_2$,$d=q_3$。
输入保证满足条件。
$Q$ 行依次给出询问的答案。
5 170337785 271451044 22430280 969056313 206452321 3 3 1 0 2 2 3 1 4 3 1 4 0
271451044 271451044 969056313
对于 $5\%$ 的数据,$n,Q \leq 100$;
对于另 $25\%$ 的数据,$n \leq 2000$;
对于 $100\%$ 的数据,$1\leq n \leq 20000$,$1\leq Q \leq 25000$,$1\leq a_i\leq 10 ^ 9$。