1303: [CQOI2009]中位数图
时间:2022-05-07
本文章向大家介绍1303: [CQOI2009]中位数图,主要内容包括1303: [CQOI2009]中位数图、Description、Input、Output、Sample Input、Sample Output、HINT、Source、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
1303: [CQOI2009]中位数图
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 1383 Solved: 902
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
Source
题解:还是和前缀和有关——将大于中位数的值设为1,小于的设为-1,等于的设为0,则可以制造一个前缀和数组——在数组中只要某两个位置(注意:范围为0-N)中值相等,则说明存在一段和为0的段,只需要排个序统计下——特别注意:一定要考虑这个段的长度究竟是奇数还是偶数,因为假如是奇数的话,则一定是合法的子序列;假如是偶数的话,则一定不是合法的子序列——也就是说两者存在明确的必然联系,所以只有长度为奇数的才计入总数,千万注意(HansBug:网上的题解貌似都没提到这个额 phile:这还用说? HansBug:T T)
1 type arr=array[-200000..200000] of longint;
2 var
3 i,j,k,l,m,n:longint;
4 a,b,c,d:arr;
5 function xxx(x:longint):longint;
6 begin
7 exit(x*(x-1) div 2);
8 end;
9 procedure swap(var x,y:longint);
10 var z:longint;
11 begin
12 z:=x;x:=y;y:=z;
13 end;
14 procedure sort(l,r:longint;var a,b:arr);
15 var i,j,x,y:longint;
16 begin
17 i:=l;j:=r;x:=b[(l+r) div 2];
18 repeat
19 while b[i]<x do inc(i);
20 while b[j]>x do dec(j);
21 if i<=j then
22 begin
23 swap(b[i],b[j]);
24 swap(a[i],a[j]);
25 inc(i);dec(j);
26 end;
27 until i>j;
28 if l<j then sort(l,j,a,b);
29 if i<r then sort(i,r,a,b);
30 end;
31 begin
32 readln(n,m);
33 a[0]:=0;b[0]:=0;
34 for i:=1 to n do
35 begin
36 read(a[i]);
37 if a[i]>m then
38 a[i]:=1
39 else if a[i]=m then a[i]:=0 else a[i]:=-1;
40 b[i]:=b[i-1]+a[i];
41 end;
42 for i:=n downto 1 do b[i+1]:=b[i];
43 for i:=n+1 downto 1 do a[i]:=i-1;
44 b[1]:=0;
45 sort(1,n+1,a,b);
46 for i:=1 to n+1 do a[i]:=a[i] mod 2;
47 b[0]:=-maxlongint;
48 j:=0;
49 b[n+2]:=maxlongint;l:=0;
50 for i:=1 to n+2 do
51 if b[i]<>b[j] then
52 begin
53 sort(j,i-1,b,a);
54 j:=i;
55 end;
56 j:=0;
57 fillchar(c,sizeof(c),0);
58 fillchar(d,sizeof(d),0);
59 for i:=1 to n+2 do
60 begin
61 if not((b[i]=b[j]) and (a[i]=a[j])) then
62 begin
63 if j<>0 then if a[j]=0 then c[b[j]]:=c[b[j]]+i-j else d[b[j]]:=d[b[j]]+i-j;
64 j:=i;
65 end;
66 end;
67 for i:=-200000 to 200000 do l:=l+c[i]*d[i];
68 writeln(l);
69 end.
70
- Go语言实现冒泡排序、选择排序、快速排序及插入排序的方法
- Go语言排序与接口实例分析
- 从 Android 静音看正确的查找 bug 的姿势
- GO语言并发编程之互斥锁、读写锁详解
- 浅析Go语言中的Range关键字
- Go语言使用sort包对任意类型元素的集合进行排序的方法
- 优化Linux的内核参数来提高服务器并发处理能力
- 浅析 Android 的窗口
- Golang同步:锁的使用案例详解
- Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?
- 高性能网络编程7--tcp连接的内存使用
- 从websocket看go的应用
- go语言chan 和 routine活用
- go语言变参,匿名函数的多种用法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Hadoop分块存储解析及还原分块存储的文件
- ValueError: too many values to unpack (expected 2)
- VMware15更新后克隆Centos7发现网卡起不来了
- 基于SSH的医院在线挂号
- Linux-远程拷贝(scp命令)
- Kettle使用JavaScript代码处理数据
- Hadoop入门---(wordcount)统计单词出现的次数
- JS去除字符串的空格
- insertionSoft(插入排序) 2.1-1 And 重写insertionSoft 2.1-2
- Swagger-Springboot-mybatis-mysql
- Python+java+websocket+SpringMVC实时监控数据库中的表
- 基于Java图形界面的IPV4与网址的地址解析器
- 如何在千里之外能访问自己的电脑?(FRP)
- 三分钟Docker-镜像、容器实战篇
- 看懂今天这个!你就是个真正的javaer!