B. Yet Another Array Partitioning Task

An array bb is called to be a subarray of aa if it forms a continuous subsequence of aa, that is, if it is equal to alal, al+1al+1, ……, arar for some l,rl,r.

Suppose mm is some known constant. For any array, having mm or more elements, let's define it's beauty as the sum of mm largest elements of that array. For example:

  • For array x=[4,3,1,5,2]x=[4,3,1,5,2] and m=3m=3, the 33 largest elements of xx are 55, 44 and 33, so the beauty of xx is 5+4+3=125+4+3=12.
  • For array x=[10,10,10]x=[10,10,10] and m=2m=2, the beauty of xx is 10+10=2010+10=20.

You are given an array a1,a2,…,ana1,a2,…,an, the value of the said constant mm and an integer kk. Your need to split the array aa into exactly kksubarrays such that:

  • Each element from aa belongs to exactly one subarray.
  • Each subarray has at least mm elements.
  • The sum of all beauties of kk subarrays is maximum possible.

Input

The first line contains three integers nn, mm and kk (2≤n≤2⋅1052≤n≤2⋅105, 1≤m1≤m, 2≤k2≤k, m⋅k≤nm⋅k≤n) — the number of elements in aa, the constant mm in the definition of beauty and the number of subarrays to split to.

The second line contains nn integers a1,a2,…,ana1,a2,…,an (−109≤ai≤109−109≤ai≤109).

Output

In the first line, print the maximum possible sum of the beauties of the subarrays in the optimal partition.

In the second line, print k−1k−1 integers p1,p2,…,pk−1p1,p2,…,pk−1 (1≤p1

  • All elements with indices from 11 to p1p1 belong to the first subarray.
  • All elements with indices from p1+1p1+1 to p2p2 belong to the second subarray.
  • …….
  • All elements with indices from pk−1+1pk−1+1 to nn belong to the last, kk-th subarray.

If there are several optimal partitions, print any of them.

Examples

input

Copy

9 2 3
5 2 5 2 4 1 1 3 2

output

Copy

21
3 5 

input

Copy

6 1 4
4 1 3 2 2 3

output

Copy

12
1 3 5 

input

Copy

2 1 2
-1000000000 1000000000

output

Copy

0
1 

Note

In the first example, one of the optimal partitions is [5,2,5][5,2,5], [2,4][2,4], [1,1,3,2][1,1,3,2].

  • The beauty of the subarray [5,2,5][5,2,5] is 5+5=105+5=10.
  • The beauty of the subarray [2,4][2,4] is 2+4=62+4=6.
  • The beauty of the subarray [1,1,3,2][1,1,3,2] is 3+2=53+2=5.

The sum of their beauties is 10+6+5=2110+6+5=21.

In the second example, one optimal partition is [4][4], [1,3][1,3], [2,2][2,2], [3][3].

题解:题目给出n,m,k和一个长度为n的数组,并定义一个数组前m大的数为其的优美度,问如何将这个n个元素的数组分成k个子数组,使得这k个小数组的优美度之和最大,并且每一个小数组至少有m个值(sure)。本题的标签有贪心和排序,既然是贪心就一如既往的将该数组中前m*k大的数之和放到ans里面,位置的要求可以再另开一个c数组,记录每一个值的下标,在运用C++中优先队列的时候内容为pair类型,first为值,second为下标,在记录的过程中下标的大小顺序可能会弄乱,再sort一波,依次输出c数组中的内容即可。

#include
using namespace std;
int n,m,k,i,a[210000],c[210000];
long long ans;
pairb;
priority_queue >q;
int main()
{
    cin>>n>>m>>k;
    for(i=1; i<=n; i++)
    {
        cin>>a[i];
        b.first=a[i];
        b.second=i;
        q.push(b);
    }
    for(i=1; i<=m*k; i++) //目的是让ans尽可能的大,我们就把前k*m个最大的加到ans里面
    {
        ans+=q.top().first; //要让ans尽可能的大,k*m个最大的都加到ans里面
        c[i]=q.top().second;//依次记录最大值的位置
        q.pop();
    }
    sort(c+1,c+m*k+1);      //排序的目的是找到合适的位置分割
    cout<

 

 

你可能感兴趣的:(贪心)