Atcoder E - Meaningful Mean(线段树+思维)
题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_c
题意:问数组a有多少子区间平均值为k
题解:一开始考虑过dp,但是显然不可行,其实将每一个数都减去k就不用求平均值了,然后就是求满足前缀和sum[r]-sum[l-1]>=0,有多少组就行了。有点像逆序对。
用线段树即可。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int M = 2e5 + 10;
struct TnT {
int pos;
ll val;
}nn[M];
struct node {
int l , r;
ll sum;
}T[M << 2];
bool cmp(TnT a , TnT b) {
if(a.val == b.val) return a.pos < b.pos;
return a.val < b.val;
}
void push_up(int i) {
T[i].sum = T[i << 1].sum + T[(i << 1) | 1].sum;
}
void build(int i , int l , int r) {
int mid = (l + r) >> 1;
T[i].l = l , T[i].r = r , T[i].sum = 0;
if(l == r) return ;
build(i << 1 , l , mid);
build((i << 1) | 1 , mid + 1 , r);
push_up(i);
}
void update(int i , int pos) {
int mid = (T[i].l + T[i].r) >> 1;
if(T[i].l == pos && T[i].r == pos) {
T[i].sum++;
return ;
}
if(mid < pos) update((i << 1) | 1 , pos);
else update(i << 1 , pos);
push_up(i);
}
ll query(int i , int l , int r) {
int mid = (T[i].l + T[i].r) >> 1;
if(T[i].l == l && T[i].r == r) {
return T[i].sum;
}
push_up(i);
if(mid < l) return query((i << 1) | 1 , l , r);
else if(mid >= r) return query(i << 1 , l , r);
else {
return query(i << 1 , l , mid) + query((i << 1) | 1 , mid + 1 , r);
}
}
int main() {
ll n , k , a;
scanf("%lld%lld" , &n , &k);
for(int i = 1 ; i <= n ; i++) {
scanf("%lld" , &a);
a -= k;
nn[i].pos = i;
nn[i].val = nn[i - 1].val + a;
}
sort(nn + 1 , nn + 1 + n , cmp);
ll ans = 0;
build(1 , 1 , (int)n);
for(int i = 1 ; i <= n ; i++) {
update(1 , nn[i].pos);
if(nn[i].val >= 0) ans++;
if(nn[i].pos - 1 == 0) continue;
ans += query(1 , 1 , nn[i].pos - 1);
}
printf("%lld\n" , ans);
return 0;
}
Atcoder E - Meaningful Mean(线段树+思维)的更多相关文章
- 【插队问题-线段树-思维巧妙】【poj2828】Buy Tickets
		可耻的看了题解 巧妙的思维 逆序插入,pos 代表的意义为前面要有pos个空格才OK: 证明:仔细思考一下就觉得是正确的,但是要想到这种方式还是要很聪明,空格是前面的几个数字所形成的,所以要特地留出来 ... 
- AtCoder AGC001F Wide Swap (线段树、拓扑排序)
		题目链接: https://atcoder.jp/contests/agc001/tasks/agc001_f 题解: 先变成排列的逆,要求\(1\)的位置最小,其次\(2\)的位置最小,依次排下去( ... 
- BZOJ 4552(二分+线段树+思维)
		题面 传送门 分析 此题是道好题! 首先要跳出思维定势,不是去想如何用数据结构去直接维护排序过程,而是尝试二分a[p]的值 设二分a[p]的值为x 我们将大于x的数标记为1,小于等于x的数标记为0 则 ... 
- Atcoder arc080E Young Maids(线段树+优先队列)
		给出一个n排列,每次可以选择相邻的两个数字放在新的排列首部,问最后形成的新的排列字典序最小是? 考虑新排列的第一个数字,则应是下标为奇数的最小数,下标不妨设为i.第二个数字应该下标大于i且为偶数的最小 ... 
- hdu 4747 mex 线段树+思维
		http://acm.hdu.edu.cn/showproblem.php?pid=4747 题意: 我们定义mex(l,r)表示一个序列a[l]....a[r]中没有出现过得最小的非负整数, 然后我 ... 
- HDU - 6315 Naive Operations (线段树+思维)  2018 Multi-University Training Contest 2
		题意:数量为N的序列a和b,a初始全为0,b为给定的1-N的排列.有两种操作:1.将a序列区间[L,R]中的数全部+1:2.查询区间[L,R]中的 ∑⌊ai/bi⌋(向下取整) 分析:对于一个位置i, ... 
- Uoj #218. 【UNR #1】火车管理 可持久化线段树+思维
		Code: #include<bits/stdc++.h> #define maxn 500005 using namespace std; int n,Q,ty,lastans=0; i ... 
- codeforces 626 G. Raffles(线段树+思维+贪心)
		题目链接:http://codeforces.com/contest/626/problem/G 题解:这题很明显买彩票肯定要买贡献最大的也就是说买p[i]*(num[i]+1)/(num[i]+a[ ... 
- 51nod 1376 最长递增子序列的数量(不是dp哦,线段树 +  思维)
		题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1376 题解:显然这题暴力的方法很容易想到就是以每个数为结尾最 ... 
随机推荐
- Docker Toolbox安装
			公司最近搭建docker环境,其中会遇到一些问题,在这里记录一下. 先来了解一下docker 一.基本概念 1.Docker中基本概念镜像(Image) 提到镜像,有对操作系统有一定认知的都知道,镜像 ... 
- Web容器启动中执行某个Java类
			1.监听(Listener) <!-- 配置监听 --> <listener> <listener-class>com.xian.jdbc.GetPropertie ... 
- 对于HTTP过程中POST内容加密的解决方案
			0x00前言 前几天我师傅和我提及了这件事情 正常情况下 抓包过程中遇到加密情况会很迷茫 昨天把这个都弄了一下 也感谢大佬中间的指导 我一开始看到密码的类型下意识的是base64 但是去解密发现不对 ... 
- Mysql无法启动情况下,如何恢复数据?
			本文适用于,mysql无法启动,但数据文件未丢失的情况. Mysql因意外情况,导致无法启动,数据库未做备份的情况下,如何将数据迁移至其他数据库中. 原数据库地址:192.168.1.100(以下简称 ... 
- java高并发系列 - 第23天:JUC中原子类,一篇就够了
			这是java高并发系列第23篇文章,环境:jdk1.8. 本文主要内容 JUC中的原子类介绍 介绍基本类型原子类 介绍数组类型原子类 介绍引用类型原子类 介绍对象属性修改相关原子类 预备知识 JUC中 ... 
- JAVA jobs
			Java岗位1, SpringMVC, spring, mybaits2, 高并发编程3, mysql或者oracle SQL调优及函数,存储过程,JOB调度 
- Layui多文件上传进度条
			Layui原生upload模块不支持文件上传进度条显示,百度,谷歌找了一下不太适用.后面找到一个别人修改好的JS,替换上去,修改一下页面显示即可使用,一下是部分代码 HTML: <div cla ... 
- Go中的字符串使用----strings和strconv
			Go中的字符串操作 字符串是工作中最常用的,值得我们专门的练习一下.在Go中使用strings包来操作字符串,这也是内置的包哈,不像Java中要么手写,要么引入common-lang 或者 别的第三方 ... 
- JavaFx应用 星之小说下载器
			星之小说下载器 说明: 需要jdk环境 目前只支持铅笔小说网,后续添加更多书源,还有安卓版,敬请期待. 喜欢的话,不妨打赏一波! 软件交流QQ群:690380139 断点下载暂未实现,小说下载途中,一 ... 
- 使用appscan安全扫描问题以及解决办法
			最近在做安全扫描,把遇到的一些问题以及一些解决方法记录下,以备后用. 扫描软件: IBM Security AppScan Standard 规则: 17441 1. 已解密的登录请求 (高) - ... 
