题面

传送门

分析

答案很好看出,显然是选最大的m*k个数

那么如何构造方案呢

我们把最大的m*k个数的位置标记为1,其他标记为0

从左到右维护一个ptr,记录有标记的数的个数,如果当前有m个有标记的数,则已经找到一个满足条件的区间分界点,break

这样的操作进行k-1次,由于ptr单调递增,时间复杂度为\(O(n)\)

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<map>
#include<algorithm>
#define maxn 200005
using namespace std;
typedef long long ll;
int n,m,k;
struct node{
int x;
int id;
}a[maxn];
int mark[maxn];
int cmp(node a,node b){
return a.x>b.x;
}
vector<int>res;
map<int,int>cnt;
int main(){
scanf("%d %d %d",&n,&m,&k);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].x);
a[i].id=i;
}
sort(a+1,a+1+n,cmp);
ll ans=0;
for(int i=1;i<=m*k;i++){
ans+=a[i].x;
mark[a[i].id]=1;
}
int ptr=1;
for(int i=1;i<k;i++){
int len=0;
while(ptr<=n){
if(mark[ptr]){
len++;
}
if(len==m) break;
ptr++;
}
res.push_back(ptr);
ptr++;
}
printf("%lld\n",ans);
for(int x : res){
printf("%d ",x);
}
}

最新文章

  1. 安装.NET FRAMEWORK 4.5安装进度条回滚之后发生严重错误 代码0x80070643
  2. iOS Application Life Cycle 应用程序生命周期
  3. NSMakeRange,substringWithRange,substringToIndex,substringFromIndex区别和联系
  4. 构建高性能web之路------mysql读写分离实战
  5. firefox下对ajax的onreadystatechange的支持情况分析及解决
  6. ref参数的用途
  7. 【ecos学习5】redboot 加载运行hello world
  8. C++多态性中基类析构函数声明为虚函数
  9. mac下brew install 报错
  10. 第19章 网络通信----UDP程序设计基础
  11. JVM 调优总结
  12. zlib 压缩输出缓冲区 overflow 问题
  13. 基于Redis实现分布式锁
  14. C#杀掉进程的方法
  15. pycharm 激活码
  16. centos7下mysql半同步复制原理安装测试详解
  17. Java实现FTP与SFTP文件上传下载
  18. js面向对象、创建对象的工厂模式、构造函数模式、原型链模式
  19. 子数组最小值的总和 Sum of Subarray Minimums
  20. appium自动化测试(四)

热门文章

  1. .NET File 多图上传
  2. 09.Linux系统由于不正常关机导致的分区问题
  3. 终于读完了《Essential C++》
  4. 牛客ACM赛 C 区区区间间间
  5. Spring---异步消息
  6. 碎片记录——JMeter之 http post json对象与参数化调用,以及beanshell 引用Java源码
  7. 如何安装 mcrypt
  8. 【HDOJ6656】Kejin Player(期望DP)
  9. (转)深入详解Java线程池——Executor框架
  10. Docker容器日常操作命令