bzoj1303[CQOI2008]中位数图 / 乱搞
题目描述
给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。
输入输出格式
输入格式:
第一行为两个正整数n和b,第二行为1~n的排列。
【数据规模】
对于30%的数据中,满足n≤100;
对于60%的数据中,满足n≤1000;
对于100%的数据中,满足n≤100000,1≤b≤n。
输出格式:
输出一个整数,即中位数为b的连续子序列个数。
输入输出样例
7 4
5 7 2 4 3 1 6
4 网上有dalao说看到中位数就想到0、-1、1代替,真的好强啊... 那么,我们把输入进来的数分为三类。把比要看成中位数大的数标为1,把比要看成中位数小的数设为-1,把要看成中位数的这个数看做0.并记录这个数的位置。 我们把要看成中位数的这个数记为T
因为合法的序列有三种:完全在T左边的序列,完全在T右边的序列,横跨T(即在T左边也有,右边也有的)的数列。 对于完全在T左边的数列,我们可以这样处理:
既然已经把除T外数列中的其他数搞为1、-1,即知道他们的相对大小。那么我们可以在从T出发向左累加,获得0时就得到了一种合法答案。
对于完全在T右边的数列同理。 对于横跨的数列:
我们可以在向左遍历时顺便求出存当前值有几个的数组(开个桶),有负数怎么办?我们可以统统加上一个较大的数kk,便不会有这种问题。
那么在向右遍历时就可以顺便求出横跨的ans。因为我们用的原理是和为0,那么ans+=f[-tmp+kk] code
#include<bits/stdc++.h>
using namespace std; int kk,n,b,pos,tmp,ans;
int a[],f[]; int main()
{
scanf("%d%d",&n,&b);
kk=n;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]>b) a[i]=;
else if(a[i]<b) a[i]=-;
else if(a[i]==b) a[i]=,pos=i;
}
for(int i=pos-;i>=;i--)
{
tmp+=a[i];
if(tmp==) ans++;
f[tmp+kk]++;
}
tmp=;
for(int i=pos+;i<=n;i++)
{
tmp+=a[i];
if(tmp==) ans++;
ans+=f[-tmp+kk];
}
ans++;
printf("%d",ans);
return ;
}
bzoj1303[CQOI2008]中位数图 / 乱搞的更多相关文章
- BZOJ1303 [CQOI2009]中位数图 【乱搞】
1303: [CQOI2009]中位数图 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3086 Solved: 1898 [Submit][Sta ...
- BZOJ1303 [CQOI2009]中位数图
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- bzoj千题计划175:bzoj1303: [CQOI2009]中位数图
http://www.lydsy.com/JudgeOnline/problem.php?id=1303 令c[i]表示前i个数中,比d大的数与比d小的数的差,那么如果c[l]=c[r],则[l+1, ...
- BZOJ1303 [CQOI2009]中位数图 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1303 题意概括 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数 ...
- 构造流量图+乱搞——cf990F
/* 结论1:有解的充要条件是所有点权之和为0 结论2:删掉环上的一条边,只要将这个环上的其余边都减去这条边的边权,那么这个图仍是等价的 从原图网络中构造出一棵带权值的树即可,其他边权都设置为0 通过 ...
- 【BZOJ1303】[CQOI2009]中位数图(模拟)
[BZOJ1303][CQOI2009]中位数图(模拟) 题面 BZOJ 洛谷 题解 把大于\(b\)的数设为\(1\),小于\(b\)的数设为\(-1\).显然询问就是有多少个横跨了\(b\)这个数 ...
- BZOJ-1834 网络扩容 最小费用最大流+最大流+乱搞
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 2269 Solved: 1136 [Submit ...
- 【uoj#142】【UER #5】万圣节的南瓜灯 乱搞+并查集
题目描述 给出一张 $n\times m$ 的网格图,两个格子之间有一条双向边,当且仅当它们相邻,即在网格图中有一条公共边. 特殊地,对于 $1\le x\le n$ ,$(x,1)$ 和 $(x ...
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ...
随机推荐
- redis 实际应用中的缓存作用(转)
有人说互联网用户是用脚投票的,这句话其实也从侧面说明了,用户体验是多么的重要:这就要求在软件架构设计时,不但要注重可靠性.安全性.可扩展性以及可维护性等等的一些指标,更要注重用户的体验,用户体验分很多 ...
- http返回写入问题
1.服务器返回写的数据全是通过response对象,response.getWriter().print(msg);这样就返回写出数据了. 比如: logger.info("encrypte ...
- weblogic线程阻塞性能调优(图解)
转自:http://blog.csdn.net/z69183787/article/details/12647539 声明:出现这个问题有程序方面.网络方面.weblogic设置方面等等原因,此文章主 ...
- Windows下SVN服务器及客户端的使用
原文地址:windows下配置VisualSVN Server服务器 作者:Deem_passion 下载安装文件: 服务端安装文件:VisualSVN-Server-1.6.2 客户端安装文件:To ...
- poj 3468 A Simple Problem with Integers(线段树、延迟更新)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 74705 ...
- MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)
前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的, ...
- 【python】搜索引擎方面的资料
http://blog.csdn.net/hguisu/article/category/1230933
- 【转】JavaScript错误处理和堆栈追踪
原文: https://www.cnblogs.com/caoru/p/6699583.html --------------------------------------------------- ...
- vsCode 常用快捷键(mac 版)
光标多行显示: commond+Alt+topArrow/downArrow 查找:commond+F 查找并按顺序切换下一个:commond+G 跳转到某一行: ctrl+G 输入行号跳转 跳转到某 ...
- 百度面试经历_web前端开发
百度面试经历_web前端开发 --2016年09月24日校招杭州站 刚面试完,担心过去就忘记掉,故回来时在地铁上用手机码下面试题目,供参考,也留作自己以后的面试参考依据.