6 条题解
-
0juan1973 LV 10 @ 2014-02-10 19:24:33
-
02014-02-10 16:37:08@
先介绍下问题1的解法:
开一个4W的数组,刚开始置为0,表示该地区的大牛当前有几个,然后O(n)模拟。
先处理下1..d有几个不同的地区,然后每次把第一个去掉,然后后一个加上,即改成:2..d+1,然后3..d+2,最后n-d+1...n
每次去掉时,如果去掉后该地区的大牛没了,当前不同地区数就-1,每次加上时,如果加上后该地区大牛只有一个,那么不同地区数+1,每一轮加入删除后更新下答案,这样问题1O(N)搞定
long getans(long d)
{
if(d==0)return 0;
long max=0;long now=0;for(long i=1;i<=39999;i++)temp[i]=0;
for(long i=1;i<=d;i++)
{
temp[dl[i]]++;if(temp[dl[i]]==1)max++;
}now=max;
for(long i=d+1;i<=n;i++)
{
temp[dl[i-d]]--;if(temp[dl[i-d]]==0)now--;
temp[dl[i]]++;if(temp[dl[i]]==1)now++;
if(now>max)max=now;
}
return max;
}
问题2:我们可以发现,如果D越大,那么覆盖的不同地区肯定是严格递增的,而且D<1000000,所以可以二分,然后用上面的getans(d)来检验。时间效率O(nlogn)
余下代码拙计,不发了 -
02013-05-05 00:01:31@
当前区间内县市个数大于等于当前最大值的时候就应该更新……而不是只在大于时更新……因为可能出现虽然县市个数一样多但是区间却比当前最大值短的情况……
-
02012-11-04 18:18:14@
补充(数据范围):
市县编号:0..32768
n:0..1000000 -
02012-11-03 20:24:56@
每个人的做法都不一样
-
02012-11-03 16:54:48@
数据范围应该是:0
- 1