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

付费网站怎么做海南海口网站开发公司

付费网站怎么做,海南海口网站开发公司,房产网站运营方案,微信聚合聊天crm系统算法思想 整体二分,带有二分二字那么就一定和二分脱不了干系。 整体二分算法常用来解决询问区间的第 k k k小值的问题,思路如下: 我们二分的对象是这道题目给定的值域,及最小值与最大值之间的区间,在题目给定的数组中…

算法思想

整体二分,带有二分二字那么就一定和二分脱不了干系。
整体二分算法常用来解决询问区间的第 k k k小值的问题,思路如下:
我们二分的对象是这道题目给定的值域,及最小值与最大值之间的区间,在题目给定的数组中,对整体的值域进行二分,我们将 m i d mid mid作为左右区间的中间值。
比如需要查询 l l l~ r r r区间内的第 k k k小值。
然后进行一下的判断。
1.当 l l l~ r r r区间内小于中值 m i d mid mid的值的数量小于当前的查询 k k k,那就说明当前的二分值小了,因为我们需要的是第 k k k大,但是现在的 m i d mid mid可以求到的第 p p p大在前 k k k大范围内,所以还需继续查,那么就得往大的查,就将区间左侧放到当前的 m i d mid mid + + + 1 1 1 m i d mid mid的值不合法,所以无需再查)
2.但 l l l~ r r r区间内小于中值 m i d mid mid的值的数量大于等于当前的查询 k k k,那么枚举到的区间就肯定包含前 k k k大的数,所以当前区间可用,将区间右侧放到现在的 m i d mid mid处( m i d mid mid的值是合法的,存在正确答案)
当最终的区间左右重合时,就得到最终答案了。
而现在是一个查询的情况,当我们遇到 q q q个查询时,我们就先把查询存起来,然后就可以将查询分为两类,就是上面的两类,左区间和右区间分别用一个数组存起来,然后分类讨论就行了,至于二分,就可以用归并排序的版子。
还有一个重要的问题:怎么查找区间内比 m i d mid mid小的值的数量?
可以考虑用树状数组存,在原数组上对树状数组进行初始化就可以了。
记得每次递归清空树状数组,并且原数组的值随着上面的两个条件分配到左右两个区间去!
然后就可以找到一道板子题:P3834 【模板】可持久化线段树 2
就是询问的板子,就不用对题目多做分析了。代码:

#include<bits/stdc++.h>
#define int long long
#define xx x&-x
using namespace std;
const int N=1e6+5;
int n,m;
struct node{int l,r,k,id,op;
}a[N],ql[N],qr[N];
int answer[N];
int bit[N];
int cnt;
void change(int x,int p){while(x<=cnt){bit[x]+=p;x+=xx;}
}
int query(int x){int res=0;while(x){res+=bit[x];x-=xx;}return res;
}
void f(int l,int r,int N,int M){if(N>=M)return;if(l==r){for(int i=N;i<=M;i++){if(a[i].op==2)answer[a[i].id]=r;}return;}int mid=l+r>>1;int t1=0,t2=0;for(int i=N;i<=M;i++){if(a[i].op==1){if(mid>=a[i].l){ql[++t1]=a[i];change(a[i].id,1);}else{qr[++t2]=a[i];}}else{int x=query(a[i].r)-query(a[i].l-1);if(x>=a[i].k){ql[++t1]=a[i];}else{a[i].k-=x;qr[++t2]=a[i];}}}for(int i=1;i<=t1;i++){a[i+N-1]=ql[i];if(ql[i].op==1)change(ql[i].id,-1);}for(int i=1;i<=t2;i++){a[i+N+t1-1]=qr[i];}f(l,mid,N,N+t1-1);f(mid+1,r,N+t1,M);
}
signed main(){ios::sync_with_stdio(0);cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i].l;a[i].id=i;a[i].op=1;}cnt=n;for(int i=1;i<=m;i++){cnt++;cin>>a[cnt].l>>a[cnt].r>>a[cnt].k;a[cnt].id=i;a[cnt].op=2;}f(-1e9,1e9,1,cnt);for(int i=1;i<=m;i++)cout<<answer[i]<<'\n';
}

然后还有另一道题目:P1527 [国家集训队] 矩阵乘法
因为树状数组的使用类似前缀和,所以这道题就相当于改成二位前缀和。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
const int M=1005;
int n,m,k;
int T;
struct node{int lx,ly,rx,ry,k,idi,idj,op,id;
}a[N],ql[N],qr[N];
int answer[N];
int bit[M][M];
int cnt;
//快读快写好习惯
int read(){int x=0,p=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')p=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*p;
}
void print(int x){if(x<0){putchar('-');x=-x;}if(x<10){putchar(x+'0');return;}print(x/10);putchar(x%10+'0');
}
void change(int x,int y,int p){for(int i=x;i<=n;i+=i&-i)for(int j=y;j<=n;j+=j&-j)bit[i][j]+=p;
}
int query(int x,int y){int res=0;for(int i=x;i;i-=i&-i)for(int j=y;j;j-=j&-j)res+=bit[i][j];return res;
}
void f(int l,int r,int N,int M){if(N>=M)return;if(l==r){for(int i=N;i<=M;i++)if(a[i].op==2)answer[a[i].id]=r;return;}int mid=l+r>>1;int t1=0,t2=0;for(int i=N;i<=M;i++){if(a[i].op==1){if(mid>=a[i].lx){ql[++t1]=a[i];change(a[i].idi,a[i].idj,1);}else{qr[++t2]=a[i];}}else{int x=query(a[i].rx,a[i].ry)+query(a[i].lx-1,a[i].ly-1)-query(a[i].lx-1,a[i].ry)-query(a[i].rx,a[i].ly-1);if(x>=a[i].k){ql[++t1]=a[i];}else{a[i].k-=x;qr[++t2]=a[i];}}}for(int i=1;i<=t1;i++){a[i+N-1]=ql[i];if(ql[i].op==1)change(ql[i].idi,ql[i].idj,-1);}for(int i=1;i<=t2;i++){a[i+N+t1-1]=qr[i];}f(l,mid,N,N+t1-1);f(mid+1,r,N+t1,M);
}
signed main(){ios::sync_with_stdio(0);n=read(),m=read();int tot=0;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){a[++tot]=node{read(),0,0,0,0,i,j,1,0};}}cnt=tot;for(int i=1;i<=m;i++){cnt++;a[cnt].lx=read(),a[cnt].ly=read(),a[cnt].rx=read(),a[cnt].ry=read(),a[cnt].k=read();a[cnt].op=2;a[cnt].id=i;}f(0,1e9,1,cnt);for(int i=1;i<=m;i++)print(answer[i]),putchar('\n');
}
http://www.dtcms.com/a/501862.html

相关文章:

  • 做网站可以赚多少钱工信和信息化网站备案系统
  • 上海知名的网站建设公司织梦网站下载
  • wordpress网站搬家教程购物商城平台有哪些
  • 有服务器有域名怎么做网站郑州网站优化推广培训
  • 17网站一起做网店白沟做网站设计师的原因
  • 网站设计与管理论文有做材料的网站吗
  • 无锡做智能网站网站建设方案分析
  • 商城网站建设模板下载网站模板打包
  • 网站改进建议新开传奇网站发布站
  • 个人网站注册平台无代码建站软件
  • 沈阳唐朝网站建设怎样开发自己的app
  • 网站服务器基本要素有哪些织梦手机网站模板
  • asp.net不适合做网站叙述网站的建设意义所在
  • 做网站dreamwa东莞如何搭建网站建设
  • 广州 骏域网站建设专家网络规划设计师教程(第2版)pdf
  • 网站建设用什么程序语言wordpress 外贸
  • 做网站用什么技术中文字体怎么设计网站
  • 个人网站开发是学什么语言深圳百度推广开户
  • 网站添加关键字把静态图片做成动态图片的软件
  • 无锡网站优化价格jquery制作简单的网页
  • 交通运输企业标准建设网站东营机关建设网站
  • 杭州网站优化外包管理系统网站开发报价
  • 服务佳的广州网站建设怎么做微信上的网站
  • 咸阳网站建设xymokj建设工程网站新专家入库
  • 大连网站建设在线什么是网站开发技术
  • 提高分辨率网站wordpress网站主机
  • 如何利用源代码做网站外贸展示型网页设计
  • 网站开发合同 doc黄强会见韩国忠清南道知事金泰钦
  • 湖州网站设计公司的别名是intitle 无线网站制作
  • 用vs做网站原型如何策划网络推广方案