洛谷P2717 寒假作业

题目:https://www.luogu.org/problemnew/show/2717

题目背景

zzs和zzy正在被寒假作业折磨,然而他们有答案可以抄啊。

题目描述

他们共有n项寒假作业。zzy给每项寒假作业都定义了一个疲劳值Ai,表示抄这个作业所要花的精力。zzs现在想要知道,有多少组连续的寒假作业的疲劳值的平均值不小于k?

简单地说,给定n个正整数A1,A2,A3,...,An,求出有多少个连续的子序列的平均值不小于k。

输入输出格式

输入格式:

第一行两个正整数,n和k。

第二行到第n+1行,每行一个正整数Ai。

输出格式:

一个非负整数。

输入输出样例

输入样例#1:

3 2
1
2
3

输出样例#1:

4

说明

样例解释:共有6个连续的子序列,分别是(1)、(2)、(3)、(1,2)、(2,3)、(1,2,3),平均值分别为1、2、3、1.5、2.5、2,其中平均值不小于k的共有4个。

对于20%的数据,1<=n<=100;

对于50%的数据,1<=n<=5000;

对于100%的数据,1<=n<=100000;

对于100%的数据,1<=Ai<=10000,1<=k<=10000。

解析

20分的话,枚举区间挨个算吧(~ ̄▽ ̄)~

50分的话,算个前缀和,枚举区间挨个算吧(~ ̄▽ ̄)~

100分怎么办?(⊙ω⊙)

是不是什么奇葩的数据结构呢?Σ( ° △ °|||)︴

反正蒟蒻我没想出来-_-!

但,我可以乱搞啊(~ ̄▽ ̄)~。

感觉那个k很烦人,我们转化一下,让每个数减k。

这样就转化成求大于等于0的区间啦。

我们不是还用过前缀和吗?那我这地方也可以用一次啦。

设s[i]代表a[i]-k的前缀和,那么,

如果i<j,且s[i]<s[j],那么区间i+1~j便是合法的喽。

有没有熟悉,有没有想到什么?(⊙ω⊙)

对啦,求逆序对哦不正序对= ̄ω ̄=

求正序对的方法和求逆序对的方法是相似的喽(~ ̄▽ ̄)~

这道题就完成啦。

warning:为什么我总是比答案少啊-_-!

tips:这不完全是逆序对啦( ﹁ ﹁ ) ~→

你需要考虑单个元素啦( ﹁ ﹁ ) ~→

单个元素若比0大答案也要+1啦( ﹁ ﹁ ) ~→

warning:为什么我会wa-_-!

tips:开long long( ﹁ ﹁ ) ~→

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 #define maxn 100100
 8 #define ll long long
 9 int a[maxn],s[maxn];
10 int tmp[maxn];
11 int n,k;
12 ll ans;
13 void merge(int l,int m,int r){
14     int i=l,j=m+1,k=l;
15     while (i<=m&&j<=r){
16         if (s[i]<=s[j]){
17             ans+=r-j+1;
18             tmp[k++]=s[i++];
19         }else{
20             tmp[k++]=s[j++];
21         }
22     }
23     while (i<=m) tmp[k++]=s[i++];
24     while (j<=r) tmp[k++]=s[j++];
25     for (int gg=l;gg<=r;++gg){
26         s[gg]=tmp[gg];
27     }
28 }
29 void merge_sort(int l,int r){
30     int m=(l+r)>>1;
31     if (l<r){
32         merge_sort(l,m);
33         merge_sort(m+1,r);
34         merge(l,m,r);
35     }
36 }
37 int main(){
38     scanf("%d%d",&n,&k);
39     for (int i=1;i<=n;++i){
40         scanf("%d",&a[i]);
41         s[i]=s[i-1]+a[i]-k;
42     }
43     merge_sort(0,n); //一定不要忘了单个元素情况
44     printf("%lld",ans);
45     return 0;
46 }

时间: 2024-10-24 12:39:55

洛谷P2717 寒假作业的相关文章

洛谷 P2717 寒假作业

题目背景 zzs和zzy正在被寒假作业折磨,然而他们有答案可以抄啊. 题目描述 他们共有n项寒假作业.zzy给每项寒假作业都定义了一个疲劳值Ai,表示抄这个作业所要花的精力.zzs现在想要知道,有多少组连续的寒假作业的疲劳值的平均值不小于k? 简单地说,给定n个正整数A1,A2,A3,...,An,求出有多少个连续的子序列的平均值不小于k. 输入输出格式 输入格式: 第一行两个正整数,n和k. 第二行到第n+1行,每行一个正整数Ai. 输出格式: 一个非负整数. 输入输出样例 输入样例#1: 3

洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解

这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Chtholly 样例: input: 5 5 72 3 2 3 43 34 45 51 52 4 output: 11122 解答: 首先观察数据范围,n<=1e+6 可能的复杂度为O(mlogn).暴力能搞30分吧. 其实这题还是很妙的.我们先考虑暴力:对于[L,R],设个res,对[l,r]从左往

洛谷P3216 [HNOI2011]数学作业

洛谷P3216 [HNOI2011]数学作业 题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenate (1 ..N)是将所有正整数 1, 2, -, N 顺序连接起来得到的数.例如,N = 13, Concatenate (1 .. N)=12345678910111213.小C 想了大半天终于意识到这是一道不可能手算出来的题目,于是他只好向你求助,

洛谷 P1855 榨取kkksc03 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1855 题目描述 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一次公开比赛),那么他可以浪费掉kkksc03的一些时间的同时消耗掉kkksc03的一些金钱以满足自己的一个愿望. Kkksc03的时间和金钱是有限的,

洛谷 P1855 榨取kkksc03

题目描述 洛谷2的团队功能是其他任何oj和工具难以达到的.借助洛谷强大的服务器资源,任何学校都可以在洛谷上零成本的搭建oj并高效率的完成训练计划. 为什么说是搭建oj呢?为什么高效呢? 因为,你可以上传私有题目,团队外别人是无法看到的.我们还能帮你们评测! 你可以创建作业,给组员布置任务,查看组员的完成情况,还可以点评任意一份代码! 你可以创建比赛!既可以是oi赛制还可以是acm赛制!既可以是团队内部的私有比赛,也可以公开赛,甚至可以指定谁可以参加比赛.这样,搞“x校联赛”最合适不过了.洛谷凭借

洛谷P1227[JSOI2008]完美的对称

洛谷P1227[JSOI2008]完美的对称 题目描述 在峰会期间,必须使用许多保镖保卫参加会议的各国代表.代表们除了由他自己的随身保镖保护外,组委会还指派了一些其他的特工和阻击手保护他们.为了使他们的工作卓有成效,使被保卫的人的安全尽可能得到保障,保镖被分配到被保护人的各个方向. 保镖的最佳站立位置应该是这样的:被保护人应站在所有保镖的对称中心.但是,只要被保 护人一移动,保镖就很难根据要人的新位置调整位置.大多数的特工都很难对此作出实时调整. 因此,安全部长决定将该过程逆转一下,保镖先站好自

洛谷——P1821 [USACO07FEB]银牛派对Silver Cow Party

P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads co

洛谷 P2709 BZOJ 3781 小B的询问

题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小B请你帮助他回答询问. 输入输出格式 输入格式: 第一行,三个整数N.M.K. 第二行,N个整数,表示小B的序列. 接下来的M行,每行两个整数L.R. 输出格式: M行,每行一个整数,其中第i行的整数表示第i个询问的答案. 输入输出样例 输入样例#1: 6 4 3 1 3 2 1 1 3

洛谷1231 教辅的组成

洛谷1231 教辅的组成 https://www.luogu.org/problem/show?pid=1231 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册.已知一个完整的书册均应该包含且仅包含一本书.一本练习册和一份答案,然而现在全都乱做了一团.许多书上面的字迹都已经模糊了,然而HansBug还是可