bzoj3721

 2023-09-05 阅读 12 评论 0

摘要:不是说好的20s吗,怎么我19s都超时……逗我最后还得写成c++才能过……首先不难发现询问肯定是O(1)的复杂度我们先把奇数和偶数分开排序,不难发现几个性质1.奇数的个数一定是奇数2.奇数选取随k成单调增然后就能在O(n)的时间预处理了…… 1 type ar

不是说好的20s吗,怎么我19s都超时……逗我
最后还得写成c++才能过……
首先不难发现询问肯定是O(1)的复杂度
我们先把奇数和偶数分开排序,不难发现几个性质
1. 奇数的个数一定是奇数
2. 奇数选取随k成单调增
然后就能在O(n)的时间预处理了……

 1 type arr=array[0..1000010] of int64;
 2 var a,b,f:arr;
 3     j,i,n1,n2,n,m,x:longint;
 4     ch:boolean;
 5 
 6 procedure qsort(var a:arr;n:longint);
 7   procedure sort(l,r: longint);
 8     var i,j: longint;
 9         x,y:int64;
10     begin
11       i:=l;
12       j:=r;
13       x:=a[(l+r) div 2];
14       repeat
15         while a[i]>x do inc(i);
16         while x>a[j] do dec(j);
17         if not(i>j) then
18         begin
19           y:=a[i];
20           a[i]:=a[j];
21           a[j]:=y;
22           inc(i);
23           j:=j-1;
24         end;
25       until i>j;
26       if l<j then sort(l,j);
27       if i<r then sort(i,r);
28     end;
29 
30   begin
31     sort(1,n);
32   end;
33 
34 begin
35   readln(n);
36   for i:=1 to n do
37   begin
38     read(x);
39     if x mod 2=1 then
40     begin
41       inc(n1);
42       a[n1]:=x;
43     end
44     else begin
45       inc(n2);
46       b[n2]:=x;
47     end;
48   end;
49   qsort(a,n1);
50   qsort(b,n2);
51   for i:=1 to n1 do
52     a[i]:=a[i-1]+a[i];
53   for i:=1 to n2 do
54     b[i]:=b[i-1]+b[i];
55   if n1=0 then
56     f[1]:=-1
57   else f[1]:=a[1];
58   i:=1;
59   j:=1;
60   while i<n do
61   begin
62     inc(i);
63     f[i]:=-1;
64     while (i-j>n2) and (j<=n1) do j:=j+2;
65     ch:=false;
66     while (j<=n1) and (i-j>=0) and (f[i]<a[j]+b[i-j]) do
67     begin
68       f[i]:=a[j]+b[i-j];
69       j:=j+2;
70       ch:=true;
71     end;
72     if ch then j:=j-2;
73   end;
74   readln(m);
75   for i:=1 to m do
76   begin
77     readln(x);
78     writeln(f[x]);
79   end;
80 end.
View Code

 

转载于:https://www.cnblogs.com/phile/p/4473096.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/1655.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息