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 ...
随机推荐
- 解高次同余方程 (A^x=B(mod C),0<=x<C)Baby Step Giant Step算法
先给出我所参考的两个链接: http://hi.baidu.com/aekdycoin/item/236937318413c680c2cf29d4 (AC神,数论帝 扩展Baby Step Gian ...
- POJ 2000
#include<iostream> #include<cstdio> #define MAXN 10009 using namespace std; ]; int main( ...
- POJ 1458
#include <iostream> #include <string> #define MAXN 1000 using namespace std; string s_1; ...
- HDU 5596/BestCoder Round #66 (div.2) GTW likes math 签到
GTW likes math Memory Limit: 131072/131072 K (Java/Others) 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主 ...
- Codeforces Round #335 (Div. 2) C. Sorting Railway Cars 连续LIS
C. Sorting Railway Cars An infinitely long railway has a train consisting of n cars, numbered from ...
- 浅析dex文件加载机制
我们可以利用DexClassLoader来实现动态加载dex文件,而很多资料也只是对于DexClassLoader的使用进行了介绍,没有深入讲解dex的动态加载机制,我们就借助于Android4.4的 ...
- Appium入门示例(python)
安装Python依赖 pip3.4 install nose pip3.4 install selenium pip3.4 install Appium-Python-Client 运行测试用例and ...
- HtmlAgilityPack 之 HtmlNode类
HtmlAgilityPack中的HtmlNode类与XmlNode类差不多,提供的功能也大同小异.下面来看看该类提供功能. 一.静态属性 public static Dictionary<st ...
- C/C++ 位域知识小结
C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存 ...
- iOS开发日期处理
Foundation框架之 日期与时间 #import"ViewController.h"@interfaceViewController() { NSTimer*_timer;/ ...