BZOJ 1303: [CQOI2009]中位数图 计数,思维
来源:互联网 发布:dota2数据查询 编辑:程序博客网 时间:2024/05/23 19:36
[Submit][Status][Discuss]
Description
给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后,位于中间的数。
Input
第一行为两个正整数n和b ,第二行为1~n 的排列。
Output
输出一个整数,即中位数为b的连续子序列个数。
Sample Input
7 4
5 7 2 4 3 1 6
Sample Output
4
HINT
第三个样例解释:{4}, {7,2,4}, {5,7,2,4,3}和{5,7,2,4,3,1,6}
N<=100000
解法:
找到b在序列里面出现的位置,比b大的赋值为-1,比b小的赋值为1,用l,r分别记录在[i,pos-1]和[pos+1,j]的
值出现的条件, 然后答案显然就是sigma(l[i]*r[0-i])。
但是这样直接统计,会出现下标变成负数的情况,所以我们统计的时候每个数加个n,这样就可以处理了。
//BZOJ 1303#include <bits/stdc++.h>using namespace std;int num[300010], sum[300010], l[300010], r[300010];int n, b, pos, ans;int main(){ scanf("%d%d", &n, &b); for(int i=1; i<=n; i++){ scanf("%d", &num[i]); if(num[i]>b) num[i]=1; else if(num[i]==b) num[i]=0, pos=i; else num[i]=-1; } l[n]=1; r[n]=1; for(int i=pos-1; i>=1; i--){ sum[i]=sum[i+1]+num[i]; l[sum[i]+n]++; } for(int i=pos+1; i<=n; i++){ sum[i]=sum[i-1]+num[i]; r[sum[i]+n]++; } for(int i=0; i<=2*n-1; i++){ ans += l[i]*r[2*n-i]; } printf("%d\n", ans); return 0;}
0 0
- BZOJ 1303: [CQOI2009]中位数图 计数,思维
- 【BZOJ 1303】 [CQOI2009]中位数图
- bzoj 1303 [CQOI2009]中位数图
- BZOJ 1303 [CQOI2009]中位数图
- 【BZOJ 1303】 【CQOI2009】中位数图
- BZOJ 1303: [CQOI2009]中位数图
- bzoj 1303: [CQOI2009]中位数图
- BZOJ 1303 [CQOI2009]中位数图
- BZOJ 1303 - [CQOI2009]中位数图 (技巧)
- 【BZOJ】1303 [CQOI2009]中位数图 建模
- bzoj 1303: [CQOI2009]中位数图 (乱搞)
- 1303: [CQOI2009]中位数图
- 1303: [CQOI2009]中位数图
- BZOJ 1303 [CQOI2009] 中位数图 题解与分析
- BZOJ_P1303 [CQOI2009]中位数图(中位数)
- [BZOJ1303][CQOI2009]中位数图
- [BZOJ1303][CQOI2009]中位数图
- BZOJ1303[CQOI2009]中位数图
- 浅谈不使用第三个变量交换两个变量的值的方法
- 分类游戏
- TensorFlow训练Logistic回归
- Kali密码攻击之——离线攻击工具
- 安装 CocoaPods和使用步骤(以高德为例)
- BZOJ 1303: [CQOI2009]中位数图 计数,思维
- 120. Triangle
- Redis之sorted sets类型及操作
- hdu 5109 Alexandra and A*B Problem
- code[vs] 1044拦截导弹(最长递减+递增子序列)
- CMOS摄像头之硬件原理
- Vim插件之limelight和goyo
- 输出图案(三)-----输出正弦曲线:(难度系数:1颗星)
- 不挂科第一篇 C++函数实参传递