就这都第十天了?
今天要搞比较高级的分治,我怕跟不上,早上过来直接开始看
C
D
Q
CDQ
CDQ 分治了
自闭了
今天是源神讲课,源神太强了,
0.5
h
0.5h
0.5h 就平推了一上午的知识点+题,然后又用了快半个小时把下午的内容讲了差不多一半,然后被老师叫停并要求重讲,然后源神花了不到
1.5
h
1.5h
1.5h 把前一个小时的东西又平推了一遍,太离谱了。
CDQ分治:反正我理解的就是把操作放在时间轴上,二分下哪些操作对后面的询问有怎样的影响
反正我大概是这么理解的
二维偏序就离谱,没太懂,用归并搞个什么东西,看了看题解看了看别人的代码,敲了个板子题
后面还有三维的
求顺序对,归并改一改就差不多?
#include<bits/stdc++.h>
using namespace std;
#define N 200010
struct lscs1{int x,y,id;}hh[N];
struct lscs2{int id,x,ans;}a[N],b[N];
int n;
bool mycmp(lscs1 x,lscs1 y){return (x.x<y.x||(x.x==y.x&&x.y<y.y));}
bool mycmp2(lscs2 x,lscs2 y){return x.id<y.id;}
void cdq(int l,int r)
{
if(l>=r)return;
int mid=(l+r)/2;
cdq(l,mid);cdq(mid+1,r);
int p=l,q=mid+1;
for(int i=l;i<=r;i++)
if((p<=mid&&a[p].x<=a[q].x)||q>r){b[i]=a[p];p++;}
else{b[i]=a[q];b[i].ans+=p-l;q++;}
for(int i=l;i<=r;i++)a[i]=b[i];
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){scanf("%d%d",&hh[i].x,&hh[i].y);hh[i].id=i;}
sort(hh+1,hh+1+n,mycmp);
for(int i=1;i<=n;i++){a[i].id=hh[i].id;a[i].x=hh[i].y;}
cdq(1,n);
sort(a+1,a+1+n,mycmp2);![在这里插入图片描述](https://img-blog.csdnimg.cn/20210715212509961.png#pic_center)
for(int i=1;i<=n;i++)printf("%d\n",a[i].ans);
return 0;
}
整体二分:首先如果只有n次询问,那么每次把询问二分,一共需要分logn次,然后每层依旧是n个,所以是nlogn,然后我们有这个想法后就考虑以这个复杂度解题,当操作中不仅有询问,还有修改时,我们把操作分开时需要判断该修改对挨着的询问有无影响,分到一起,所以后面就可以很快的速度得到每次询问的答案了。
根据源神的说法,大概就是这个样子?然而我根本不会操作,而且正说把操作分开的时候,突然最后二分出来答案了,感觉好离谱啊,根本不会写。
真自闭啊。
点分治:之前老师就讲过,让写博客总结,我不光当时没写,我现在还不写,唉~就是玩
然后还有一个对我来说太难理解了
好想玩啊~
同学都叫我打
L
O
L
LOL
LOL 了(我自己的号高考结束后解封,需要借号)
啧啧啧,真好
然后有个沁一的初中同学也搞
o
i
oi
oi ,但是老师不认真,他还是在家经常自学
啧啧啧
说点更开心的
今天下午跟mzx学长打羽毛球,还是一样的压迫感,还没怎么玩就被同学要走了球拍,然后我在旁边看,
75
75
75阳光男孩,球一来我就赶紧蹲下抱头,像个胆小菇,然后就听mzx学长说些八卦,并且得到了一个神奇的网站
叔
叔
不
约
叔\;叔\;不\;约
叔叔不约
吐槽下gcf学长放我鸽子
许昌的一些人去外边买东西,还帮我带了点,感觉自己又满状态了,明天考试,又要爆
0
0
0 了~
我真是不自量力留在提高里啊
说起来许昌的szx竟然是个兲狗,我答应不给别人发聊天记录,于是让他上撤硕,然后让jyn翻他电脑看(本来我是把所有聊天记录合并了的,希望她直接转发走的)
我真傻,真的,我单知道jyn很会整活,我不知道
然后myf大佬帮我搬了床铺,然后数竞的学姐还来这边坐了一会儿(本来想让她教我点数论的,无奈问文化课老师)
自闭了,但又没完全自闭,我最后问尧神和源神了一下这些数学式子,也算是半懂了这些东西。
已经
11
11
11 点了,我还在机房,卷别人的感觉真爽!