当前位置: 首页 > wzjs >正文

公司做网站的费用产品设计培训

公司做网站的费用,产品设计培训,河北 邢台,自己做网站需要哪些流程从二维数点&#xff08;二维偏序&#xff09;到三维偏序。 用 cdq 分治可以解决二维数点问题。 1.洛谷 P1908 逆序对 题意 求所有数对 ( i , j ) (i,j) (i,j) 的个数&#xff0c;满足 i < j i<j i<j 且 a i > a j a_i>a_j ai​>aj​。 1 ≤ n ≤ 5 1…

从二维数点(二维偏序)到三维偏序。

用 cdq 分治可以解决二维数点问题。

1.洛谷 P1908 逆序对

题意

求所有数对 ( i , j ) (i,j) (i,j) 的个数,满足 i < j i<j i<j a i > a j a_i>a_j ai>aj

1 ≤ n ≤ 5 × 1 0 5 1\le n \le 5\times10^5 1n5×105

思路

欲学习树状数组解法的,请移步这里。这里用 cdq 分治的作为复习。

在很久很久以前,我们介绍过归并排序,说到可以使用归并排序的思想来解决这样的逆序对(二维偏序、二维数点)问题,也可以用于找一些特定的数对。

cdq 分治是一种思想,体现的当然是“分而治之”。处理区间 ( l , r ) (l,r) (l,r),其流程大概为:

  • 找到中点 m i d mid mid
  • 将所有可能存在的点对分为三类:
    1 . i ∈ [ l , m i d ] , j ∈ [ l , m i d ] i\in[l,mid],j\in[l,mid] i[l,mid],j[l,mid]
    2 . i ∈ [ l , m i d ] , j ∈ [ m i d + 1 , r ] i\in[l,mid],j\in[mid+1,r] i[l,mid],j[mid+1,r];
    3 . i ∈ [ m i d + 1 , r ] , j ∈ [ m i d + 1 , r ] i\in[mid+1,r],j\in[mid+1,r] i[mid+1,r],j[mid+1,r]
  • 递归处理第 1 , 3 1,3 1,3 类;
  • 设法处理第 2 2 2 类。

(以上参考自OI - WIKI)

严格来说,这种二维偏序题并不能算作 cdq 分治,其实只是分治思想和双指针的应用。我们考虑双指针 p ∈ [ l , m i d ] p\in[l,mid] p[l,mid] q ∈ [ m i d + 1 , r ] q\in[mid+1,r] q[mid+1,r]

  • 如果 a p ≤ a q a_p\le a_q apaq,那么当前 p p p 并不能对 q q q 产生贡献,我们考虑将 p p p 合并到新数组 b b b 去;
  • 否则即 a p > a q a_p>a_q ap>aq,因为 p < q p<q p<q 所以此时产生了逆序对,可以产生贡献;
  • 因为我们已经分治处理了 l ∼ m i d l\sim mid lmid m i d + 1 ∼ r mid+1\sim r mid+1r,所以以 m i d mid mid 分开的左右两段区间都已经是有序的了(上一步的合并操作),所以 a q a_q aq l ∼ p − 1 l\sim p-1 lp1 的都要大,比 p ∼ m i d p\sim mid pmid 的都要小,所以逆序对个数增加 m i d − p + 1 mid-p+1 midp+1 个;
  • 那么 a q a_q aq 已经不能产生接下来的逆序对,扔进 b b b

记得把已经排序好了的 b b b 数组复制到 a l ∼ r a_{l\sim r} alr 去:

void cdq(ll l,ll r)
{if(l>=r)return;ll mid=(l+r)>>1;cdq(l,mid);cdq(mid+1,r);ll i=l,p=l,q=mid+1;while(p<=mid&&q<=r){if(q>r||p<=mid&&a[p]<=a[q])b[i++]=a[p++];//并入没法贡献的p else {b[i++]=a[q++];cnt+=mid-p+1;//a(i)>a(j)的数量,取右边大的 }}while(p<=mid)b[i++]=a[p++];while(q<=r)cnt+=mid-p+1,b[i++]=a[q++];for(int o=l;o<=r;o++)a[o]=b[o];
}

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=5e5+9;
ll n,a[N];
ll b[N],cnt;
void cdq(ll l,ll r)
{if(l>=r)return;ll mid=(l+r)>>1;cdq(l,mid);cdq(mid+1,r);ll i=l,p=l,q=mid+1;while(p<=mid&&q<=r){if(q>r||p<=mid&&a[p]<=a[q])b[i++]=a[p++];//并入没法贡献的p else {b[i++]=a[q++];cnt+=mid-p+1;//a(i)>a(j)的数量,取右边大的 }}while(p<=mid)b[i++]=a[p++];while(q<=r)cnt+=mid-p+1,b[i++]=a[q++];for(int o=l;o<=r;o++)a[o]=b[o];
}
int main()
{scanf("%lld",&n);for(int i=1;i<=n;i++)scanf("%lld",&a[i]);cdq(1,n);printf("%lld",cnt);return 0;
}

2.洛谷 P2717 寒假作业/P2804 神秘数字

题意

给定一个长度为 n n n 的正整数序列 a i a_i ai,求出有多少个连续子序列的平均值不小于 k k k

1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1n105 1 ≤ ∀ a i , k ≤ 1 0 4 1\le \forall a_i,k\le 10^4 1ai,k104

洛谷 P2804:要求平均值严格大于 k k k

这里按照洛谷 P2717 的题面进行讲解。

思路

在这里我们讲到,这是一个“顺序对”:求所有 l < r , s l ≤ s r l<r,s_l\le s_r l<r,slsr 的个数,我们只要取比 a q a_q aq 小的左边: l ∼ p − 1 l\sim p-1 lp1即可,每次贡献加 p − l p-l pl

因为是前缀和数组,所以 l = 0 l=0 l=0 是合法的,记得从 0 0 0 开始。

代码 1 - 寒假作业

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e5+9;
ll n,k,a[N];
ll s[N],cnt,b[N];
void cdq(ll l,ll r) 
{if(l>=r)return;ll mid=(l+r)>>1;cdq(l,mid);cdq(mid+1,r);ll i=l,p=l,q=mid+1;while(p<=mid&&q<=r){if(s[p]<=s[q])b[i++]=s[p++];else {cnt+=p-l;//s(i)<s(j),取左边小的 b[i++]=s[q++];}}while(p<=mid)b[i++]=s[p++];while(q<=r)cnt+=p-l,b[i++]=s[q++];for(ll o=l;o<=r;o++)s[o]=b[o];
}
int main()
{scanf("%lld%lld",&n,&k);for(ll i=1;i<=n;i++){scanf("%lld",&a[i]);a[i]-=k;s[i]=s[i-1]+a[i];}cdq(0,n);printf("%lld",cnt);return 0;
}

2 2 2 题,要求严格大于,所以只需要改成:

if(s[p]<s[q])b[i++]=s[p++];

即可。记得取题目规定的模。

3.洛谷 P2163 SHOI2007 园丁的烦恼

4.洛谷 P3157 CQOI2011 动态逆序对/UVA11990 "Dynamic’’ Inversion


文章转载自:

http://PLteCyUB.rdzgm.cn
http://tuYBowyY.rdzgm.cn
http://DqIa7zXf.rdzgm.cn
http://2vRfEUkd.rdzgm.cn
http://C1BhzOI4.rdzgm.cn
http://55LxKtmt.rdzgm.cn
http://EtAfFSIo.rdzgm.cn
http://S8W9Dp1T.rdzgm.cn
http://SJCSugGn.rdzgm.cn
http://NcToskuZ.rdzgm.cn
http://G12MbI0w.rdzgm.cn
http://6z6tMlis.rdzgm.cn
http://EEqtiJKF.rdzgm.cn
http://8e1BBt3e.rdzgm.cn
http://7ZbaX9Ow.rdzgm.cn
http://rmEucuwV.rdzgm.cn
http://9NB7xeb9.rdzgm.cn
http://znGFswHM.rdzgm.cn
http://dTqmhXWN.rdzgm.cn
http://hpirOSFN.rdzgm.cn
http://nDqRgCMb.rdzgm.cn
http://WRm4RtFL.rdzgm.cn
http://pEtU5baf.rdzgm.cn
http://9SU7nfI4.rdzgm.cn
http://688NAeF5.rdzgm.cn
http://hKtvV9RK.rdzgm.cn
http://szYacsWf.rdzgm.cn
http://tPgUumQ6.rdzgm.cn
http://GdddWVUy.rdzgm.cn
http://NJqJ0pNF.rdzgm.cn
http://www.dtcms.com/wzjs/611500.html

相关文章:

  • 九亭做网站公司建设部2018年工作要点网站
  • 深圳建站模板公司wordpress织梦扩展
  • 做原创的网站百度开户推广
  • 网站后台首页模板网站建设功能需求
  • 51制作视频mv网站磁力帝
  • asp网站500错误深圳建设工程交易服务网站
  • 网站域名301个人网站备案 备注
  • 织梦调用网站名称杭州物联网前十名公司
  • 南宁自助模板建站wordpress 广告管理
  • 网站建设shzanen北京建设部网站 信息中心
  • 内部购物券网站怎么做凡客诚品羽绒服
  • 商业网站的域名后缀是什么室内设计效果图片
  • 学校的网站建设费如何入账专题网站建设
  • php网站做语言包手机网站开发人员工具
  • ps怎么做网站的首页怎么做社交网站引流到亚马逊
  • 济南优化网站的哪家好帮我写一个网页
  • 做竞价网站要准备什么条件广州开发app哪家公司好
  • 做公司网站应准备什么材料最新wordpress模板
  • 东莞企业推广网站南京外贸网站建设案例
  • 沈阳建站模板展示商城网站开发合同
  • 做网站需要什么按钮2022知名品牌营销案例100例
  • 公司做网站需要注意什么自己做网站花钱吗
  • 建立健全安全生产责任制的根本目的是河南网站排名优化价格
  • 网站所有人做网站需要了解哪些知识
  • 中英文网站前端怎么做wordpress 漫画站
  • 伊宁网站建设优化网页游戏新游戏
  • 下载168网站河北百度推广电话
  • 深圳微商城网站制作报价东海网站建设
  • 温岭哪里有做网站的手机建网站步骤
  • wordpress建站安全吗建设网站需要准备哪些内容