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

最全的提交网站入口大全线上营销模式

最全的提交网站入口大全,线上营销模式,html5 音乐网站,金华做网站当题⽬中数据的范围很⼤,但是数据的总量不是很⼤。此时如果需要⽤数据的值来映射数组的下标时,就可以⽤离散化的思想先预处理⼀下所有的数据,使得每⼀个数据都映射成⼀个较⼩的值。之后再⽤离散化之后的数去处理问题。 ⽐如:[99, …

当题⽬中数据的范围很⼤,但是数据的总量不是很⼤。此时如果需要⽤数据的值来映射数组的下标时,就可以⽤离散化的思想先预处理⼀下所有的数据,使得每⼀个数据都映射成⼀个较⼩的值。之后再⽤离散化之后的数去处理问题。
⽐如:[99, 9, 9999, 999999]离散之后就变成[2, 1, 3, 4]

【离散化模板⼀】排序+去重+⼆分离散化之后的值

// 离散化模板⼀:排序 + 去重 + ⼆分查找离散之后的结果  
#include <iostream>  
#include <algorithm>  
using namespace std;  const int N = 1e5 + 10;  int n;  
int a[N];  
int pos; // 标记去重之后的元素个数
int disc[N]; // 帮助离散化  // ⼆分 x 的位置  
int find(int x)  
{  int l = 1, r = pos;  while(l < r)  {  int mid = (l + r) / 2;  if(disc[mid] >= x) r = mid;  else l = mid + 1;  }  return l;  
}  int main()  
{  cin >> n;  for(int i = 1; i <= n; i++)  {  cin >> a[i];  disc[++pos] = a[i];  }  // 离散化  sort(disc + 1, disc + 1 + pos); // 排序  pos = unique(disc + 1, disc + 1 + pos) - (disc + 1); // 去重  for(int i = 1; i <= n; i++)  {  cout << a[i] << "离散化之后:" << find(a[i]) << endl;  }  return 0;  
}

【离散化模版⼆】排序+使⽤哈希表去重并且记录离散化之后的值

// 离散化模板⼆:排序 + 哈希表去重以及记录最终的位置  
#include <iostream>  
#include <algorithm>  
#include <unordered_map>  
using namespace std;const int N = 1e5 + 10;  int n;  
int a[N];  
int pos; // 标记去重之后的元素个数  
int disc[N]; // 帮助离散化  
unordered_map<int, int> id; // <原始的值, 离散之后的值>  int main()  
{  cin >> n;  for(int i = 1; i <= n; i++)  {  cin >> a[i];  disc[++pos] = a[i];  }  // 离散化  sort(disc + 1, disc + 1 + pos); // 排序  int cnt = 0; // 当前这个值是第⼏号元素  for(int i = 1; i <= pos; i++)  {  int x = disc[i];  if(id.count(x)) continue;  cnt++;  id[x] = cnt;  }  for(int i = 1; i <= n; i++)  {  cout << a[i] << "离散化之后:" << id[a[i]] << endl;  }  return 0;  
}

【注意事项】

  1. 离散化是⼀种「处理数据的技巧」,模版其实不⽤背,根据算法思想就可以实现。并且实现离散化的⽅式也可以在上述模板的基础上「修改」,使⽤的时候千万「不要⽣搬硬套」(⼤家也会看到有些题解⾥⾯是借助「结构体」离散化的,但是核⼼的思想都是⼀样的);
  2. 前期学习离散化的时候可能会被「绕」进去,会把「离散前」和「离散后」的值搞混,分不清楚是⽤离散前的值还是离散后的值。觉得迷惑是「很正常」,⼀定要根据离散化的原理「画图」分析整个流程。搞清楚每⼀个变量的作⽤以及达到的⽬的,就不会那么迷
P1496 火烧赤壁 - 洛谷

抛开数据范围不看,这就是⼀道「差分」题⽬:

  • 给定⼀个区间,我们可以全部执⾏+1 操作;
  • 最后看看整个数组中,⼤于0 的位置有多少个。
    因此可以创建⼀个原数组的「差分」数组,然后执⾏完「区间修改」操作之后,还原原数组,「统计⼤于0 」的区间⻓度。
    但是,这道题的「数据范围」不允许我们直接差分,因为「开不了那么⼤」的数组;即使能开那么⼤的数组,「时间」也不够⽤。
    我们发现,区间的范围虽然很⼤,区间的「个数」却只有2 × 10^4 级别。此时我们就可以:
  1. 先将所有的「区间信息」离散化;
  2. 然后在「离散化的基础」上,处理所有的「区间修改」操作;
  3. 处理完之后找出「原始数组对应的区间端点」,计算相应的「⻓度」
#include <bits/stdc++.h>
using namespace std;const int N = 2e4 + 10;int n;
int a[N], b[N];int pos;
int disc[N * 2];
unordered_map<int, int> id;
int f[N * 2];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n;for (int i = 1; i <= n; i++){cin >> a[i] >> b[i];disc[++pos] = a[i];disc[++pos] = b[i];}//离散化sort(disc+1, disc+1+pos);pos = unique(disc+1, disc+1+pos) - (disc+1); //去重int cnt = 0;for (int i = 1; i <= pos; i++){int x = disc[i];if (id.count(x)) continue;id[x] = i;}//离散化的基础上做差分for (int i = 1; i <= n; i++){int l = id[a[i]], r = id[b[i]];f[l]++;f[r]--;}//还原数组for (int i = 1; i <= pos; i++) f[i] += f[i-1];//统计结果int ret = 0;for (int i = 1; i <= pos; i++){int j = i;while (j <= pos && f[j] > 0) j++;//i-jret += disc[j] - disc[i];i = j;}cout << ret << endl;return 0;
}
P3740 [HAOI2014] 贴海报 - 洛谷

根据题意「模拟」即可。
由于「区间的⻓度」很⼤,暴⼒模拟的时候会超时。但是我们发现,虽然区间⻓度很⼤,但是「区间的个数」是很少的,所以我们可以「离散化」处理⼀下区间的端点值,然后在「离散化的基础上」模拟覆盖情况。
离散化在离散「区间问题」的时候⼀定要⼩⼼!因为我们离散化操作会把区间缩短,从⽽导致丢失⼀些点。在涉及「区间覆盖」问题上,离散化会导致「结果出错」。
⽐如我们这道题,如果有三个区间分别为:[2,5],[2,3],[5,6] ,离散化之后为:[1,3],[1,2],[3,4]
区间覆盖如图所⽰:
![[Pasted image 20250406135605.png]]

为了避免出现上述情况,我们可以在离散化的区间[x,y]时,不仅考虑x,y这两个值,也把「
x+1,y+1 」也考虑进去。此时「单个区间内部」就出现空隙,「区间与区间之间」也会出现空
隙。就可以避免上述情况出现。
可⻅,离散化之后可能会导致结果错误,使⽤的时候还是需要「谨慎」⼀点

#include <bits/stdc++.h>
using namespace std;const int N = 1010;int n, m;
int a[N], b[N];int pos;
int disc[N * 4];
unordered_map<int, int> id;int w[N * 4]; //海报墙
bool st[N * 4]; //标记哪些数字出现过int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;for (int i = 1; i <= m; i++){cin >> a[i] >> b[i];disc[++pos] = a[i]; disc[++pos] = a[i] + 1;disc[++pos] = b[i]; disc[++pos] = b[i] + 1;}sort(disc+1, disc+1+pos);int cnt = 0;for (int i = 1; i <= pos; i++){int x = disc[i];if (id.count(x)) continue;cnt++;id[x] = cnt;}//模拟for (int i = 1; i <= m; i++){//离散化之后的值a[i]-b[i]int l = id[a[i]], r = id[b[i]];for (int j = l; j <= r; j++){w[j] = i;        }}//统计结果int ret = 0;for (int i = 1; i <= cnt; i++){int x = w[i];if (!x || st[x]) continue;ret++;st[x] = true;}cout << ret << endl;return 0;
}

文章转载自:

http://UR8JeEgR.pznhn.cn
http://jlJ3CKd0.pznhn.cn
http://3fnsOMNv.pznhn.cn
http://sGGAaSiK.pznhn.cn
http://ZpRfdi8X.pznhn.cn
http://dR2EjT9l.pznhn.cn
http://6CEj3npK.pznhn.cn
http://giYXDCfG.pznhn.cn
http://RvCB5By0.pznhn.cn
http://WGlW6uC3.pznhn.cn
http://RkuogE3e.pznhn.cn
http://gJpgQEFg.pznhn.cn
http://KriGMg0R.pznhn.cn
http://iLq59A9M.pznhn.cn
http://wwLYGTfA.pznhn.cn
http://UmY55z9K.pznhn.cn
http://temMeawP.pznhn.cn
http://q1D7haM6.pznhn.cn
http://qCa7DVi4.pznhn.cn
http://lwStZutS.pznhn.cn
http://Rw4oZwuU.pznhn.cn
http://ixI5Npa6.pznhn.cn
http://lE8adydy.pznhn.cn
http://78573l7l.pznhn.cn
http://8RxH7R6t.pznhn.cn
http://ATa8JN49.pznhn.cn
http://jLSVg9Yp.pznhn.cn
http://oWQx6ZFu.pznhn.cn
http://mOpD07bB.pznhn.cn
http://A10G53sK.pznhn.cn
http://www.dtcms.com/wzjs/665120.html

相关文章:

  • 淮北市住房和城乡建设局网站网站备案是否收费
  • 手机网站和电脑网站的区别个人网站的制作步骤
  • 网站建设要做哪些前期准备工作海南网络广播电视台地震避险常识
  • 免费开网站新浪博客怎么给自己网站做链接吗
  • 高校 网站建设实施方案网站建设方案和报价表
  • 成都网站建设 网络公司网站建设有哪些优质公众号
  • 从零开始做一个网站需要多少钱wordpress如何设置用户登录
  • 开公司做网站石油 技术支持 东莞网站建设
  • 太原住房与城乡建设厅网站厦门建网站费用一览表
  • 珠海网站建设公顺德网站开发招聘
  • 网站后台 网站页面没有显示微网站界面设计
  • 制作个网站需要多少钱如何备份wordpress网站
  • 建设一个大型网站需要多少钱上海的网站开发公司
  • 做一个网站需要多大的空间禾天姿网站建设
  • 山门做网站丹东市网站开发公司
  • 百度 网站质量静态网页设计制作实训报告摘要
  • 网站开发公司郑州深圳国际物流公司排名前十
  • 朔州网站建设费用wordpress胖子马
  • 做网站的计划2022最新热点时评十篇
  • 企业网站建设需要考虑内容金华网站建设方案报价
  • 广州网站建设策划免费源码交易网站源码
  • 银川网站建设实习生crm系统是什么意思啊
  • 网站建设工单系统凡科做的网站推效果
  • 浙江品牌网站建设深圳网站建设的价格
  • 建设银行建湖支行官方网站wordpress注册密码
  • 聊城做网站的公司平台如何制作公司网站和网页
  • 免费商城网站模板惠州做网站优化
  • 做英文网站要会什么购物网网站建设
  • 做网站有没有用有没有免费看的视频
  • 专业提供网站制作wordpress 自定义类型