题目连接

很明显,1e6的范围,要么nlgn要么O(n)

nlgn的话可能会想到借助一些数据结构,我并没有想到这种做法

对于这种题,O(n)的做法要么是线性递推,要么就应该是贪心了

考虑这道题我们怎么贪心

如果可以走无数个来回的话,那很明显我们可以从小到大依次取出,一定是最大的

可惜只能走一个来回

那么我们来看看只能走一个来回的话,有什么特性

对于第i个同学,要么是去的时候取出,要么是回来的时候取出,我们来考虑一下这有什么区别

当第i个同学为从去的时候取出变为回来的时候取出,多做的贡献就是排名差乘上他的权值

那么他会对那些同学造成影响呢?由于教官的路线是一个来回,我们不妨破环成链来考虑一下。

我们会发现第i个同学对应着两个位置——\(i\)和\(2n-i+1\),设i为去的时候去的时候取,\(2n-i+1\)为回来取,那么如果我们将去的时候取换成回来取,会造成\([i+1,2n-i]\)之间的点排名整体前移1,也就是说如果第i名同学滞后取出,会造成\(-\sum_{k=i+1}^n w[k]\)的贡献,这个很明显可以用前缀和或后缀和O(1)算出

那么很明显了,如果i同学滞后选择额外产生的贡献严格大于零(因为要求相同情况序号字典序最小)那么我们就可以最后再选择他。

那么我们就可以直接贪心求方案,用双指针记录目前还没有确认的出列顺序的左右端点

没明白就看代码吧

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#ifdef ONLINE_JUDGE
#define printf(o"\n") printf("I AK IOI\n")
#define printf(o) printf("I AK IOI")
#endif
#define ll long long
#define gc getchar
#define maxn 1000005
using namespace std; inline ll read(){
ll a=0;int f=0;char p=gc();
while(!isdigit(p)){f|=p=='-';p=gc();}
while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=gc();}
return f?-a:a;
} int n,l,r;
ll ans,a[maxn],b[maxn],c[maxn];
int main(){
n=read();l=1,r=n;
for(int i=1;i<=n;++i){
a[i]=read();
b[i]=a[i]+b[i-1]; //前缀和
}
for(int i=1;i<=n;++i){
ll jia=a[i]*(r-l); //表示滞后取出产生的正贡献
if(jia>b[n]-b[i]){ //大于负贡献也就是大于零
c[r]=i;
ans+=(ll)a[i]*r;
--r;
}
else{ //否则正常取出
c[l]=i;
ans+=(ll)a[i]*l;
++l;
}
}
printf("%lld\n",ans);
for(int i=1;i<=n;++i)
printf("%lld ",a[c[i]]); //c数组记录的只是下标,可别直接输出c数组
return 0;
}

抄题解的猜猜我代码能不能AC(滑稽

洛谷 P5078 Tweetuzki 爱军训的更多相关文章

  1. 【贪心】【P5078】Tweetuzki 爱军训

    Description Tweetuzki 所在的班级有 \(n\) 名学生,座号从 \(1\) 到 \(n\).有一次,教官命令班上的 \(n\) 名学生按照座号顺序从左到右排成一排站好军姿,其中 ...

  2. [洛谷P5081]Tweetuzki 爱取球

    题目大意:有$n$个球,每一次取一个球然后放回,问期望多少次取遍所有球 题解:令$f_i$表示已经取了$i$种球,还要取的次数的期望.$f_i=\dfrac in(f_i+1)+\dfrac{n-i} ...

  3. 洛谷P2432 zxbsmk爱查错

    题目 DP,需要注意边界上的问题. 状态定义\(dp[i]\)为句子第i位去除字母的最小值,答案就是\(dp[len]\). 易得状态转移方程为: \[dp[i]=min(dp[i-1]+1,dp[l ...

  4. 洛谷 P4559: bzoj 5319: [JSOI2018]军训列队

    题目传送门:洛谷 P4559. 题意简述: 有 \(n\) 个学生,编号为 \(i\) 的学生有一个位置 \(a_i\). 有 \(m\) 个询问,每次询问编号在 \([l,r]\) 区间内的学生跑到 ...

  5. 洛谷P2891 Dining P1402 酒店之王【类二分图匹配】题解+代码

    洛谷P2891 Dining P1402 酒店之王[类二分图匹配]题解+代码 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的 ...

  6. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  7. 【题解】洛谷P2607【ZJOI2008】骑士

    洛谷P2607:https://www.luogu.org/problemnew/show/P2607 一道毒瘤的环基树问题 第一次做环基树的题目 刚看题目的时候觉得不就是跟没有上司的舞会一样嘛 然后 ...

  8. [洛谷P3942] 将军令

    洛谷题目链接:将军令 题目背景 历史/落在/赢家/之手 至少/我们/拥有/传说 谁说/败者/无法/不朽 拳头/只能/让人/低头 念头/却能/让人/抬头 抬头/去看/去爱/去追 你心中的梦 题目描述 又 ...

  9. 洛谷p3398仓鼠找suger题解

    我现在爱死树链剖分了 题目 具体分析的话在洛谷blog里 这里只是想放一下改完之后的代码 多了一个son数组少了一个for 少了找size最大的儿子的for #include <cstdio&g ...

随机推荐

  1. C#基础之继承

    继承是在类之间建立一种相交的关系,使得新定义的派生类的实例可以继承已有的基类的特征并且还可以添加新的功能.以前对继承的理解仅仅限于定义,下面是我查了些资料.写了点代码的总结. 1.C#继承的特点 (1 ...

  2. BZOJ4049][CERC2014]Mountainous landscape-[线段树+凸包+二分]

    Description 现在在平面上给你一条折线P1P2P3...Pn. x坐标是严格单调递增的.对于每一段折线PiPi+1,请你找一个最小的j,使得j>i且走在PiPi+1的人能看到折线PjP ...

  3. I/O: std::ios_base::openmode

    I/O: std::ios_base::openmode std::ios_base::openmode std::ios_base::in:  打开文件进行读操作,即读取文件中的数据 如果指定路径中 ...

  4. 【LG4841】城市规划

    [LG4841]城市规划 题面 洛谷 题解 记\(t_i\)表示\(i\)个点的无向图个数,显然\(t_i=2^{C_i^2}\). 设\(f_i\)表示\(i\)个点的无向连通图个数,容斥一下,枚举 ...

  5. PHP 中的mktime()函数本周时间

    上周写一个接口,用到了本周的开始时间和结束时间作为筛选条件去筛选数据,我只记得有mktime()这个函数,具体怎么用的不太清楚,于是百度之,找到了这个: 本周开始时间:date("Y-m-d ...

  6. 原生与JS交互 iOS

      前言 Hybrid App(混合模式移动应用)是指介于web-app.native-app这两者之间的app,兼具“Native App良好用户交互体验的优势”和“Web App跨平台开发的优势” ...

  7. 433. Number of Islands【LintCode java】

    Description Given a boolean 2D matrix, 0 is represented as the sea, 1 is represented as the island. ...

  8. Redis的数据类型以及每种数据类型的使用场景

    人就是很奇怪的动物,很简单的问题往往大家都容易忽略,当我们在使用分布式缓存Redis的时候,一个最简单的问题Redis的数据类型以及每种数据类型的使用场景是什么? 是不是觉得这个问题很基础?我也这么觉 ...

  9. 深度学习论文笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of Planetary Gearboxes

    这篇文章将深度学习算法应用于机械故障诊断,采用了“小波包分解+深度残差网络(ResNet)”的思路,将机械振动信号按照故障类型进行分类. 文章的核心创新点:复杂旋转机械系统的振动信号包含着很多不同频率 ...

  10. Python 装饰器Decorator(一)

    (一) 装饰器基础知识 什么是Python装饰器?Python里装饰器是一个可调用的对象(函数),其参数是另一个函数(被装饰的函数) 假如有一个名字为somedecorator的装饰器,target是 ...