博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1303: [CQOI2009]中位数图
阅读量:4678 次
发布时间:2019-06-09

本文共 1221 字,大约阅读时间需要 4 分钟。

一开始看错题意了!!没注意到整个数列是1~n的一个排列!

很水的一道题,找到b在数列中的位置设为point,比b大的赋值为-1,比b小的赋值为1;

然后求出sum[i,point]的值出现了几次记为lfre[sum[i,point]]++; ans += lfre[sum[i,point]]*rfre[-sum[i,point]];

由于c++数组不能是负数,所以稍微处理一下

1 /* 2 ID:WULALA 3 PROB:bzoj1303  4 LANG:C++ 5 */ 6 #include 
7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #define N 10000814 #define M15 #define mod16 #define mid(l,r) ((l+r) >> 1)17 #define INF 0x7ffffff18 using namespace std;19 20 int b,point,n,num[N],sum[N],lfre[2 * N],rfre[2 * N],ans;21 22 int main()23 {24 scanf("%d%d",&n,&b);25 for (int i = 1;i <= n;i++)26 {27 scanf("%d",&num[i]);28 if (num[i] < b) num[i] = -1;29 else if (num[i] > b) num[i] = 1;30 else if (num[i] == b) point = i,num[i] = 0;31 }32 lfre[n] = 1; rfre[n] = 1;33 for (int i = point - 1;i >= 1;i--) sum[i] = sum[i+1] + num[i],lfre[sum[i]+n]++;34 for (int i = point + 1;i <= n;i++) sum[i] = sum[i-1] + num[i],rfre[sum[i]+n]++;35 for (int i = 0;i <= 2 * n - 1;i++) ans += lfre[i] * rfre[2*n-i];36 printf("%d\n",ans);37 return 0; 38 }
View Code

 

转载于:https://www.cnblogs.com/wulala979/p/3507029.html

你可能感兴趣的文章
mysql数据工厂生产_MySQL超时与天蓝色数据工厂副本
查看>>
python缩进可以用在任何语句之后_每天一道Python选择题--python缩进
查看>>
mysql查询左边大于左边_MySQL WHERE 子句
查看>>
java 获取颜色_java关于照片属性的获取,颜色模式
查看>>
session丢失原因 java_session没有过期,其保存的数据无故丢失的原因
查看>>
java pkcs 11 write_java pkcs#11读取证书加解密(初学-分享)
查看>>
tranisant java_java tranisant
查看>>
java ibatis 存储过程_ibatis 调用存储过程
查看>>
java中的softreference_Java语言中内存优化的SoftReference 和 WeakReference的对比分析
查看>>
java提供了丰富的类库_Java优势有哪些?
查看>>
java 过滤器权限控制_JAVA过滤器,实现登陆权限限制
查看>>
设计模式java 模板模式_java设计模式--模板方法模式
查看>>
中缀转后缀 java_Java 利用堆栈将中缀表达式转换成后缀
查看>>
java执行sql解析_java执行SQL语句实现查询的通用方法详解
查看>>
java中keepalived开启方式_高可用之KeepAlived(一):基本概念和配置文件分析
查看>>
java中的ejb_JAVA语言中关于EJB技术概论
查看>>
java有date类型吗_关于java中date类型的问题
查看>>
java中svg图片怎么用_svg如何使用
查看>>
java dart 官司_From Java to Dart
查看>>
java ftp 读取excel_从Excel文件读取数据表
查看>>