洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治
题目:https://www.luogu.org/problemnew/show/3157
题解:
1.对于静态的逆序对可以用树状数组做
2.我们为了方便可以把删除当成增加,可以化动为静
3.找到三维:时间,位置,大小
然后CDQ分治
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 200010
typedef long long ll;
using namespace std;
ll n,m,ans[N],a[N],t[N];
struct point
{ll t,pos,val;bool operator < (const point &x)const{return val>x.val;}
}p[N],tmp[N];
bool cmp(const point &x,const point &y)
{return x.t<y.t;}
void add(int x,int k)
{for (;x<N;x+=x&-x) t[x]+=k;
}
ll query(int x)
{ll ret=0;for (;x;x-=x&-x) ret+=t[x];return ret;
}
void solve(int l,int r)
{if (l==r) return ;int mid=l+r>>1,i=l,j=mid+1;solve(l,mid),solve(mid+1,r);for (int k=l;k<=r;k++)if (i<=mid && (p[i]<p[j] || j>r))tmp[k]=p[i++];else tmp[k]=p[j++];for (i=l;i<=r;i++) {p[i]=tmp[i];if (p[i].t<=mid) add(p[i].pos,1);else ans[p[i].t]+=query(p[i].pos);}for (i=l;i<=r;i++) if (p[i].t<=mid) add(p[i].pos,-1);for (i=r;i>=l;i--)if (p[i].t<=mid) add(p[i].pos,1);else ans[p[i].t]+=query(n)-query(p[i].pos);for (i=l;i<=r;i++)if (p[i].t<=mid) add(p[i].pos,-1);}
int main()
{scanf("%lld%lld",&n,&m);for (int i=1,x;i<=n;i++)scanf("%lld",&x),p[x].val=x,p[x].pos=i;for (int i=0,x;i<m;i++)scanf("%lld",&x),p[x].t=n-i;for (int i=1,cnt=0;i<=n;i++)if (!p[i].t) p[i].t=++cnt;sort(p+1,p+n+1,cmp);solve(1,n);for(int i=1;i<=n;i++)ans[i]+=ans[i-1];for(int i=n;i>=n-m+1;i--)printf("%lld\n",ans[i]);return 0;
}
转载于:https://www.cnblogs.com/mrsheep/p/8093738.html
洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治相关推荐
- P3157 [CQOI2011]动态逆序对 (CDQ解决三维偏序问题)
P3157 [CQOI2011]动态逆序对 题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任 ...
- BZOJ 3295: [Cqoi2011]动态逆序对 cdq分治
https://www.lydsy.com/JudgeOnline/problem.php?id=3295 这个妹妹我曾见过的~~~ 之前应该在校内oj写了,似乎还写过题解?发现没写博客就重新水一遍代 ...
- [Luogu P3157][CQOI2011]动态逆序对 (树套树)
题面 传送门:[CQOI2011]动态逆序对 Solution 一开始我看到pty巨神写这套题的时候,第一眼还以为是个SB题:这不直接开倒车线段树统计就完成了吗? 然后冷静思考了一分钟,猛然发现单纯的 ...
- 【洛谷3157】[CQOI2011] 动态逆序对(CDQ分治)
点此看题面 大致题意: 给你一个从\(1\)到\(n\)的排列,问你每次删去一个元素后剩余的逆序对个数. 关于\(80\)分的树套树 为了练树套树,我找到了这道题目. 但悲剧的是,我的 线段树套\(T ...
- BZOJ3295 [Cqoi2011]动态逆序对 分治 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8678185.html 题目传送门 - BZOJ3295 题意 对于序列$A$,它的逆序对数定义为满足$i< ...
- bzoj3295:[CQOI2011]动态逆序对
传送门 线段树套线段树会TLE+MLE! 树状数组不仅空间小,常数也小(我写的除外) 思考一下求逆序对需要的条件,树套树就过了 代码: #include<cstdio> #include& ...
- 洛谷P1966 火柴排队(逆序对)
题意 题目链接 Sol 不算很难的一道题 首先要保证权值最小,不难想到一种贪心策略,即把两个序列中rank相同的数放到同一个位置 证明也比较trivial.假设\(A\)中有两个元素\(a, b\), ...
- 【洛谷 P2513】 [HAOI2009]逆序对数列(DP)
题目链接 这种求方案数的题一般都是\(dp\)吧. 注意到范围里\(k\)和\(n\)的范围一样大,\(k\)是完全可以更大的,到\(n\)的平方级别,所以这暗示了我们要把\(k\)写到状态里. \( ...
- [CQOI2011]动态逆序对
emmm 显然的考虑影响 后面比x小的 前面比x大的 还要单点修改 只有树套树了. 暴力无脑线段树套fhq 会TLE到80pts 单点修改,区间查询 树状数组套动态开点线段树显然更优啊 2781ms ...
最新文章
- 推荐的 CSS 书写顺序
- JVM调优总结(五)-分代垃圾回收详述1
- 访问新建的SpringBoot项目提示:WhitelabelErrorPage
- 给wordpress最新文章添加“new”标记
- Windows 7 仅是Windows Vista SP2?
- 计算机组成原理的实验节拍,一种计算机组成原理的实验装置
- 5G标准化加速 需应对测试场景复杂性
- zabbix监控第一台服务器(10)
- android mmkv使用_锦囊篇|一文摸懂SharedPreferences和MMKV(一)
- 结构动力学MATLAB编程例题,Matlab有限元结构动力学分析与工程应用(源程序)
- 徐思201771010132《面向对象程序设计(java)》第九周学习总结
- 必须正视TD-SCDMA可能存在的重大技术错误(ZT)
- 如何彻底对chrome降级
- 测试版ios15怎么信任软件,苹果ios15信任的描述文件在哪?苹果ios15授权信任怎么设置?...
- iled to read key AndroidDebugKey from store “D:\路经\.android\debug.keystore“: Invalid keystore format
- ROC曲线、FROC曲线、SROC曲线和LROC曲线
- ThinkPHP 连接MSSQL PHP连接MSSQL
- SQL21天自学通pdf 百度云盘
- 根据所选日期、当前日期计算一周的日期和星期,农历
- 3601lpk.dll劫持病毒分析