题目: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分治相关推荐

  1. P3157 [CQOI2011]动态逆序对 (CDQ解决三维偏序问题)

    P3157 [CQOI2011]动态逆序对 题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任 ...

  2. BZOJ 3295: [Cqoi2011]动态逆序对 cdq分治

    https://www.lydsy.com/JudgeOnline/problem.php?id=3295 这个妹妹我曾见过的~~~ 之前应该在校内oj写了,似乎还写过题解?发现没写博客就重新水一遍代 ...

  3. [Luogu P3157][CQOI2011]动态逆序对 (树套树)

    题面 传送门:[CQOI2011]动态逆序对 Solution 一开始我看到pty巨神写这套题的时候,第一眼还以为是个SB题:这不直接开倒车线段树统计就完成了吗? 然后冷静思考了一分钟,猛然发现单纯的 ...

  4. 【洛谷3157】[CQOI2011] 动态逆序对(CDQ分治)

    点此看题面 大致题意: 给你一个从\(1\)到\(n\)的排列,问你每次删去一个元素后剩余的逆序对个数. 关于\(80\)分的树套树 为了练树套树,我找到了这道题目. 但悲剧的是,我的 线段树套\(T ...

  5. BZOJ3295 [Cqoi2011]动态逆序对 分治 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8678185.html 题目传送门 - BZOJ3295 题意 对于序列$A$,它的逆序对数定义为满足$i< ...

  6. bzoj3295:[CQOI2011]动态逆序对

    传送门 线段树套线段树会TLE+MLE! 树状数组不仅空间小,常数也小(我写的除外) 思考一下求逆序对需要的条件,树套树就过了 代码: #include<cstdio> #include& ...

  7. 洛谷P1966 火柴排队(逆序对)

    题意 题目链接 Sol 不算很难的一道题 首先要保证权值最小,不难想到一种贪心策略,即把两个序列中rank相同的数放到同一个位置 证明也比较trivial.假设\(A\)中有两个元素\(a, b\), ...

  8. 【洛谷 P2513】 [HAOI2009]逆序对数列(DP)

    题目链接 这种求方案数的题一般都是\(dp\)吧. 注意到范围里\(k\)和\(n\)的范围一样大,\(k\)是完全可以更大的,到\(n\)的平方级别,所以这暗示了我们要把\(k\)写到状态里. \( ...

  9. [CQOI2011]动态逆序对

    emmm 显然的考虑影响 后面比x小的 前面比x大的 还要单点修改 只有树套树了. 暴力无脑线段树套fhq 会TLE到80pts 单点修改,区间查询 树状数组套动态开点线段树显然更优啊 2781ms ...

最新文章

  1. 推荐的 CSS 书写顺序
  2. JVM调优总结(五)-分代垃圾回收详述1
  3. 访问新建的SpringBoot项目提示:WhitelabelErrorPage
  4. 给wordpress最新文章添加“new”标记
  5. Windows 7 仅是Windows Vista SP2?
  6. 计算机组成原理的实验节拍,一种计算机组成原理的实验装置
  7. 5G标准化加速 需应对测试场景复杂性
  8. zabbix监控第一台服务器(10)
  9. android mmkv使用_锦囊篇|一文摸懂SharedPreferences和MMKV(一)
  10. 结构动力学MATLAB编程例题,Matlab有限元结构动力学分析与工程应用(源程序)
  11. 徐思201771010132《面向对象程序设计(java)》第九周学习总结
  12. 必须正视TD-SCDMA可能存在的重大技术错误(ZT)
  13. 如何彻底对chrome降级
  14. 测试版ios15怎么信任软件,苹果ios15信任的描述文件在哪?苹果ios15授权信任怎么设置?...
  15. iled to read key AndroidDebugKey from store “D:\路经\.android\debug.keystore“: Invalid keystore format
  16. ROC曲线、FROC曲线、SROC曲线和LROC曲线
  17. ThinkPHP 连接MSSQL PHP连接MSSQL
  18. SQL21天自学通pdf 百度云盘
  19. 根据所选日期、当前日期计算一周的日期和星期,农历
  20. 3601lpk.dll劫持病毒分析

热门文章

  1. 北航算法作业一 约瑟夫环问题
  2. linux内核自旋锁API
  3. Linux headtail命令
  4. ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
  5. 来自damon的zencart二次开发教程-3.2复制模板(仿站)操作教程
  6. 利用优盘安装win2008r2系统
  7. 架构设计贵在务实(转载)
  8. Ubuntu解决gedit warning问题的方法
  9. php mysql简单链接_php mysql 数据库链接简单例子
  10. Explore Optimization