HDU 5273 Dylans loves sequence (逆序对,暴力)
题意:
给定一个序列,对于q个询问:(L,R)之间有几个逆序对?序列元素个数<=1000,q<=100000。只有1个测试例子。
思路:
[L,R]的逆序对数量可以这么算,假设L<=K<R,将区间拆成两部分,那么[L,k]中的逆序对要算上, (k,R]中的逆序对也要算上,还有一些逆序对假设为(l,r),l在左部分,r在右部分。则应该是3部分来构成,设3部分为A,B,C,那么ans=A+B+C 。
而如果将k移到最右边,比如k=R-1,那么区间拆成[L,k]和(K,R],而(K,R]其实就只有R一个元素,并不存在什么逆序对,所以B=0,那么ans=A+C,仅仅由两部分构成,就简单了。
对于序列a,假设m[j][i]表示从j到i-1之间有几个大于a[i](如果知道了j到i-1之间有多少逆序对,那么再加上m[j][i]就是j到i之间的逆序对数了)。复杂度1k*1k。
接着求答案了,假设ans[L][R]表示从L到R之间有多少个逆序对,那么ans[j][i]=ans[j][i-1]+m[j][i]。而我们知道ans[j][j]肯定为0,那么就能计算出其他的答案了。复杂度1k*1k。
(也可以对于每个询问才来求ans[L][R],复杂度10w*1k还是可以过的)
#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <map>
#include <vector>
#include <set>
#include <map>
#define LL long long
using namespace std;
const int N=; int a[N];
int m[N][N];
int ans[N][N];
int n, q; void cal()
{
memset(m,,sizeof(m));
memset(ans,,sizeof(ans)); for(int i=; i<=n; i++)
{
for(int j=i-; j>; j--)
if(a[j]>a[i]) m[j][i]=m[j+][i]+; //计算在j~i-1之间比a[i]大的有几个
else m[j][i]=m[j+][i];
} for(int i= ;i<=n; i++)
for(int j=i+; j<=n; j++)
ans[i][j]=ans[i][j-]+m[i][j]; } int main()
{
//freopen("input.txt", "r", stdin);
int aa,bb;
while(~scanf("%d%d",&n,&q))
{
for(int j=; j<=n; j++)
scanf("%d",&a[j]); cal();
while(q--)
{
scanf("%d%d",&aa,&bb);
printf("%d\n",ans[aa][bb]);
}
} return ;
}
AC代码
HDU 5273 Dylans loves sequence (逆序对,暴力)的更多相关文章
- hdu 5273 Dylans loves sequence 逆序数简单递推
Dylans loves sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...
- hdu 5273 Dylans loves sequence
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5273 Dylans loves sequence Description Dylans is give ...
- HDU 5273 Dylans loves sequence 暴力递推
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5273 bc:http://bestcoder.hdu.edu.cn/contests/con ...
- HDU 5273 Dylans loves sequence【 树状数组 】
题意:给出n个数,再给出q个询问,求L到R的逆序对的个数 先自己写的时候,是每次询问都重新插入来求sum(r)-sum(l) 果断T 后来还是看了别人的代码---- 预处理一下,把所有可能的区间的询问 ...
- HDU 5273 Dylans loves numbers(水题)
题意:给出一个0≤N≤1018,求其二进制中有几处是具有1的,假设相连的1只算1处,比如1101011就是3处. 思路:一个个数,当遇到第一个1时就将flag置为1:当遇到0就将flag置为0.当遇到 ...
- hdu 5274 Dylans loves tree(LCA + 线段树)
Dylans loves tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- Hdu 5274 Dylans loves tree (树链剖分模板)
Hdu 5274 Dylans loves tree (树链剖分模板) 题目传送门 #include <queue> #include <cmath> #include < ...
- Hdu 5806 NanoApe Loves Sequence Ⅱ(双指针) (C++,Java)
Hdu 5806 NanoApe Loves Sequence Ⅱ(双指针) Hdu 5806 题意:给出一个数组,求区间第k大的数大于等于m的区间个数 #include<queue> # ...
- hdu 5272 Dylans loves numbers
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5272 Dylans loves numbers Description Who is Dylans?Y ...
随机推荐
- windbg内核诊断方式--转载
一.WinDbg是什么?它能做什么? WinDbg是在windows平台下,强大的用户态和内核态调试工具.它能够通过dmp文件轻松的定位到问题根源,可用于分析蓝屏.程序崩溃(IE崩溃)原因,是我们日常 ...
- 使用Varnish代替Squid做网站缓存加速器的详细解决方案----转载
[文章作者:张宴 本文版本:v1.2 最后修改:2008.01.02 转载请注明出处:http://blog.s135.com] 我曾经写过一篇文章──<初步试用Squid的替代产品──Varn ...
- CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板。
CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板. CLIP PATH (MASK) GENERATO ...
- listview优化 汇总
1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listvi ...
- spring mvc 基于注解的使用总结
本文转自http://blog.csdn.net/lufeng20/article/details/7598801 概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Sprin ...
- MongoDB (九) MongoDB 投影
mongodb 投影意思是只选择必要的数据而不是选择一个文件的数据的整个.如果一个文档有5个字段,需要显示只有3个,然后选择其中只有3个字段. find() 方法 MongoDB 的find()方法, ...
- Sold out
When will the writer see the play? 'The play may begin at any moment,'I said. 'It may have begun alr ...
- web.xml配置bug之提示The content of element type "web-app" must match "(icon?,display- name?,description?,distributable?,
错误:配置web.xml时,出现红色叉叉,提示 The content of element type "web-app" must match "(icon?,disp ...
- AcmeAir
AcmeAir是一款由原 IBM 新技术架构部资深工程师Andrew Spyker,利用Netflix开源的Netflix OSS打造的开源电子商务应用.访问这里可以了解原作者的设计初衷: http: ...
- 开放api设计资料收藏
REST设计 api设计范例http://www.ibm.com/developerworks/cn/web/1103_chenyan_restapi/index.html?ca=drs http:/ ...