XDU1024简单逆序对(贪心||分治)
题目描述
输入
输出
输出逆序对的个数,且对10^9+7取模
样例输入
- 2
- 3
- 3 2 1
- 3
- 1 2 1
样例输出
- 3
- 1
解法一:数学贪心解法(有点小技巧哦)
- #include<bits/stdc++.h>
- using namespace std;
- const int mod=1e9+;
- int d[];
- int main()
- {
- int T,n;
- cin>>T;
- while(T--){
- cin>>n;
- int ans=,arr[n];
- memset(d,,sizeof(d));
- memset(arr,,sizeof(arr));
- for(int i=;i<=n;i++) cin>>arr[i];
- for(int i=;i<=n;i++){
- int res=;
- d[arr[i]]++;
- for(int j=arr[i]+;j<=;j++)
- res=(res+d[j])%mod;
- ans=(ans+res)%mod;
- }
- cout<<ans<<endl;
- }
- }
解法二:分治(和归并排序类似吧感觉)
- #include<bits/stdc++.h>
- using namespace std;
- const int maxn=1e6+;
- const int mod=1e9+;
- int ans;
- int a[maxn],c[maxn];
- void Conquer_Divide(int l,int r)
- {
- int m=(l+r)/;
- if(r>l){
- Conquer_Divide(l,m);
- Conquer_Divide(m+,r);
- int i=l,j=m+,t=l;
- while(i<=m&&j<=r){
- if(a[i]>a[j]){
- c[t++]=a[j++];
- ans=(ans+m-i+)%mod;
- }
- else c[t++]=a[i++];
- }
- while(i<=m) c[t++]=a[i++];
- while(j<=r) c[t++]=a[j++];
- for(i=l;i<=r;i++) a[i]=c[i];
- }
- }
- int main()
- {
- int n,T;
- cin>>T;
- while(T--){
- cin>>n;
- for(int i=;i<=n;i++)
- scanf("%d",&a[i]);
- ans=;
- Conquer_Divide(,n);
- printf("%d\n",ans);
- }
- }
XDU1024简单逆序对(贪心||分治)的更多相关文章
- BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组
BZOJ_3295_[Cqoi2011]动态逆序对_CDQ分治+树状数组 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一 ...
- P3157 动态逆序对 CDQ分治
动态逆序对 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3157 题意: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对 ...
- [BZOJ3295][Cqoi2011]动态逆序对 CDQ分治&树套树
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且 ...
- BZOJ 3295 动态逆序对 | CDQ分治
BZOJ 3295 动态逆序对 这道题和三维偏序很类似.某个元素加入后产生的贡献 = time更小.pos更小.val更大的元素个数 + time更小.pos更大.val更小的元素个数. 分别用类似C ...
- [CQOI2011]动态逆序对 CDQ分治
洛谷上有2道相同的题目(基本是完全相同的,输入输出格式略有不同) ---题面--- ---题面--- CDQ分治 首先由于删除是很不好处理的,所以我们把删除改为插入,然后输出的时候倒着输出即可 首先这 ...
- 洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治
题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维 ...
- 【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
[BZOJ3295][Cqoi2011]动态逆序对 Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依 ...
- bzoj3295: [Cqoi2011]动态逆序对(cdq分治+树状数组)
3295: [Cqoi2011]动态逆序对 题目:传送门 题解: 刚学完cdq分治,想起来之前有一道是树套树的题目可以用cdq分治来做...尝试一波 还是太弱了...想到了要做两次cdq...然后伏地 ...
- BZOJ 3295: [Cqoi2011]动态逆序对 [CDQ分治]
RT 传送门 首先可以看成倒着插入,求逆序对数 每个数分配时间(注意每个数都要一个时间)$t$,$x$位置,$y$数值 $CDQ(l,r)$时归并排序$x$ 然后用$[l,mid]$的加入更新$[mi ...
随机推荐
- sencha touch routes(路由) 传递中文参数
使用路由的时候可以传递参数 如下: index.html#eaterylist/335/61/61/61/B/商户名称 其中6个参数依次是:商户编号/公众账号/微信号/校验号/服务类型/商户名称 因为 ...
- github命令行下载项目源码
一.git clone [URL] 下载指定ur的源码 $ git clone https://github.com/jquery/jquery 二.指定参数, -b是分支, --depth 1 最新 ...
- spring boot 通过Maven + tomcat 自动化部署
使用maven创建的springboot项目,默认是jar包,springboot还有自己带的tomcat. 现在为了简单实现本地自动发布项目到服务器,需要通过发布war包的形式,通过maven将项目 ...
- hihocoder 1320 - 压缩字符串 - [hiho一下160周]
这道题目可以说是一道非常好非常一颗赛艇的DP题了. 需要注意的是,其中情形3),字符串必然能完全转化为 N(str)形式,如果有N(str1)M(str2)等等另外样式,应该首先使用拼接形式对其进行划 ...
- The Unique MST----poj1679次小生成树
题目链接:http://poj.org/problem?id=1679 判断最小生成数是否唯一:如果唯一这权值和次小生成树不同,否则相同: #include<stdio.h> #inclu ...
- lmathlib文件
lua的math库是通过lua扩展而来,主要对系统math库进行了一次封装,以供lua使用,一般可以从lmathlib文件开始阅读源码. //绝对值 static int math_abs (lua_ ...
- maven报错集
1.install报错解决[致命错误: 在类路径或引导类路径中找不到程序包 java.lang] Windows分隔符英文分号 <bootclasspath>${java.home}/li ...
- MySQL找出锁等待
1.服务器级别的锁等待 可以通过show processlist看到等待锁的线程id,但是无法知道究竟哪个线程持有锁 可以通过mysqladmin debug 相关等待锁的线程以及谁持有锁可以在错误日 ...
- 数据库级别DDL操作监控审计、数据库触发器/服务器触发器
关键词:数据库触发器/服务器触发器 ,数据库级别DDL操作监控审计,禁止修改登录名密码 [1]数据库级别DDL操作监控审计 转自2012示例库,只能数据库级别,不能实例级别 use database ...
- XMind思维导图自定义图标/图片