2307. 选择
(File IO): input:choose.in output:choose.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
题目描述
输入
输出
样例输入
样例输出
数据范围限制
提示
【样例解释】
样例一:L = 1, R = 3 样例二:L = 2, R = 5
Solution
题目恶心到我能看懂
Algorithm(n3)
枚举l,枚举r,枚举i∈[l,r];累加sum,minans打擂台
Code(≌0分)
#include//不想OI一场空,千万别用万能头#include //快排sort()#include //能不用cin就不用#include #include
Algorithm(n2)
枚举l,枚举r;sum动态变化,minans打擂台
Code(20分)
#include//不想OI一场空,千万别用万能头#include //能不用cin就不用#include #include
Algorithm(nlog(n))
这才是重点……
一个suma存a的前缀和
一个sumb存b的前缀和
一个diff存suma-sumb
于是内存10MB起步
为了省空间
我又修改了一遍再提交;
在每个循环(i:1 to n)中,
suma[i]=sum[i-1]+a[i]
sumb[i]=sum[i-1]+b[i]
diff[i]=suma[i]-sumb[i]
=suma[i-1]+a[i]-(sumb[i-1]+b[i])
=suma[i-1]-sumb[i-1]+a[i]-b[i]
=diff[i-1]+a[i]-b[i]
于是我就省了许多空间(甚至连数组b都可以不要滴)
10MB->5MB
150ms->105ms
Code(100分)
//10MB部分即为注释#include//不想OI一场空,千万别用万能头#include //快排sort()#include //能不用cin就不用#include #include
Attention
sort从0开始!(就算diff只用了1~n)
因为diff可能保存负值
diff[0]=0 如果不参加排序,diff[1]-diff[0]岂不还是diff[0],与我们的目的偏离甚远?
不如就让0参加排序嘛
这也代表着:l==0时的情况
另外
数组和minans开long long!
数组和minans开long long!
数组和minans开long long!
否则满分80分,(扣20分起步)……