洛谷P3157 动态逆序对 [CQOI2011] cdq分治
正解:cdq分治
解题报告:
这题首先想到的就直接做逆序对,然后记录每个点的贡献,删去就减掉就好
但是仔细一想会发现布星啊,如果有一对逆序对的两个点都被删了岂不是就减重了嘛
那就再加上一个值
这个值是什么呢,就是满足逆序对且逆序对的另一个数的删除时间小于这个数的数对的个数(,,,有点绕口,,,但应该能get,,,?
然后就做完了,就是个cdq分治
但是这么想484有点复杂,,,?主要是实现起来想想它要实现哪些东西就jio得代码估计会比较长,就不想打嘛
那就再转化一下题意
把删去操作想成插入操作
那就是从后往前操作,每次会插入一些数,那这个数的贡献就是满足插入时间小于它且满足逆序对的数对的个数
这样就只要做一遍cdq就好了(其实核心思想是一样的,,,只是私信jio得这个方法的代码应该好打一些w
然后等下放代码QAQ!
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define rg register
#define gc getchar()
#define lowbit(x) (x&(-x))
#define rp(i,x,y) for(rg int i=x;i<=y;++i)
#define my(i,x,y) for(rg ll i=x;i>=y;--i) const ll N=1e5+;
struct ques{ll pos,tim,num,as;}q[N],t[N];
bool is_del[N];
ll n,m,sum,q_cnt,del[N],p[N],tr[N]; il ll read()
{
rg char ch=gc;rg int x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc; if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il void updat(ll x,ll y){while(x<=n)tr[x]+=y,x+=lowbit(x);}
il ll query(ll x){ll tmp=;while(x)tmp+=tr[x],x-=lowbit(x);return tmp;}
il bool cmp(ques gd,ques gs){return gd.tim<gs.tim;}
il bool cmq(ques gd,ques gs){return gd.pos<gs.pos;}
il void solv(ll l,ll r)
{
if(l>=r)return;ll mid=(l+r)>>,num=;solv(l,mid);solv(mid+,r);sort(q+l,q+r+,cmq);
rp(i,l,r)if(q[i].tim<=mid)updat(q[i].num,),++num;else q[i].as+=num-query(q[i].num);
rp(i,l,r)if(q[i].tim<=mid)updat(q[i].num,-);
my(i,r,l)if(q[i].tim<=mid)updat(q[i].num,);else q[i].as+=query(q[i].num);
rp(i,l,r)if(q[i].tim<=mid)updat(q[i].num,-);
} int main()
{
n=read();m=read();rp(i,,n)p[read()]=i;rp(i,,m)is_del[del[i]=read()]=;rp(i,,n)if(!is_del[i])q[++q_cnt]=(ques){p[i],q_cnt,i,};
my(i,m,)q[++q_cnt]=(ques){p[del[i]],q_cnt,del[i],};
solv(,n);sort(q+,q++n,cmp);rp(i,,n)q[i].as+=q[i-].as;my(i,n,n-m+)printf("%lld\n",q[i].as);
return ;
}
这是代码!(树状数组真的比线段树好打这——么多!爱了爱了TT
洛谷P3157 动态逆序对 [CQOI2011] cdq分治的更多相关文章
- 洛谷P1393 动态逆序对(CDQ分治)
传送门 题解 听别人说这是洛谷用户的双倍经验啊……然而根本没有感觉到……因为另外的那题我是用树状数组套主席树做的……而且莫名其妙感觉那种方法思路更清晰(虽然码量稍稍大了那么一点点)……感谢Candy大 ...
- 【Luogu1393】动态逆序对(CDQ分治)
[Luogu1393]动态逆序对(CDQ分治) 题面 题目描述 对于给定的一段正整数序列,我们定义它的逆序对的个数为序列中ai>aj且i < j的有序对(i,j)的个数.你需要计算出一个序 ...
- 【洛谷3157】[CQOI2011] 动态逆序对(CDQ分治)
点此看题面 大致题意: 给你一个从\(1\)到\(n\)的排列,问你每次删去一个元素后剩余的逆序对个数. 关于\(80\)分的树套树 为了练树套树,我找到了这道题目. 但悲剧的是,我的 线段树套\(T ...
- luogu P3157 [CQOI2011]动态逆序对(CDQ分治)
题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序 ...
- bzoj3295: [Cqoi2011]动态逆序对(cdq分治)
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- bzoj 3295 [Cqoi2011]动态逆序对(cdq分治,BIT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3295 [题意] n个元素依次删除m个元素,求删除元素之前序列有多少个逆序对. [思路] ...
- [luogu3157][bzoj3295][CQOI2011]动态逆序对【cdq分治+树状数组】
题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序 ...
- BZOJ3295 [Cqoi2011]动态逆序对 【CDQ分治】
题目 对于序列A,它的逆序对数定义为满足i 输入格式 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为 ...
- 【题解】动态逆序对 [CQOI2011] [P3157] [BZOJ3295] [P1393]
[题解]动态逆序对 [CQOI2011] [P3157] [BZOJ3295] [P1393] 水一水QAQ 题目链接: \([P3157]\) \([BZOJ3295]\) [题目描述] 对于一个序 ...
随机推荐
- 【web端权限维持】利用ADS隐藏webshell
0X01 前言 未知攻,焉知防,在web端如何做手脚维护自己拿到的权限呢?首先要面临的是webshell查杀,那么通过利用ADS隐藏webshell,不失为一个好办法. 0X02 利用ADS隐藏web ...
- commons-beanutils的使用
commons-beanutils是通过内省来完成的. 需要两个包: commons-beanutils-1.8.3.jar commons-logging-1.1.1.jar JavaBean类: ...
- JS 省市县三级联动
$(".area").change(function(ent,arg){ var $this = $(this), level = $(this).attr("id&qu ...
- 简单mysql类
---恢复内容开始--- class mysql { private $host; private $user; private $pass; private $database; private $ ...
- 《转》python学习(10)-集合
转自 http://www.cnblogs.com/BeginMan/p/3160565.html 一.目录 1.集合概述 2.关于集合的操作符.关系符号 3.集合的一系列操作(添加.更新.访问.删除 ...
- 【盘古分词】Lucene.Net 盘古分词 实现公众号智能自动回复
盘古分词是一个基于 .net framework 的中英文分词组件.主要功能 中文未登录词识别 盘古分词可以对一些不在字典中的未登录词自动识别 词频优先 盘古分词可以根据词频来解决分词的歧义问题 多元 ...
- Win8交互UX——键盘交互
设计用户可以通过硬件键盘.屏幕键盘或触摸键盘交互的 Windows 应用商店应用. 本主题介绍键盘交互的设计注意事项.有关实现键盘交互的信息,请参阅响应键盘输入. 键盘交互 键盘输入是 Windows ...
- python错误 ImportError: No module named setuptools 解决方法[转]
在python运行过程中出现如下错误: python错误:ImportError: No module named setuptools这句错误提示的表面意思是:没有setuptools的模块,说明p ...
- 六、K3 WISE 开发插件《直接SQL报表开发新手指导 - BOM成本报表》
======================== 目录: 1.直接SQL报表 ======================== 1.直接SQL报表 以BOM成本报表为例,在销售模块部署,需要购买[金蝶 ...
- 使用import取代require
首先,Module 语法是 JavaScript 模块的标准写法,坚持使用这种写法.使用import取代require. // bad const moduleA = require('moduleA ...