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

上海企业名称查询系统百度优化插件

上海企业名称查询系统,百度优化插件,网站流量高有什么用,旅游app界面设计压缩变换 原题目链接 题目描述 小明最近在研究压缩算法。他知道,压缩时如果能够使数值很小,就能通过熵编码得到较高的压缩比。然而,要使数值变小是一个挑战。 最近,小明需要压缩一些正整数序列,这些序列的特点是&a…

压缩变换

原题目链接

题目描述

小明最近在研究压缩算法。他知道,压缩时如果能够使数值很小,就能通过熵编码得到较高的压缩比。然而,要使数值变小是一个挑战。

最近,小明需要压缩一些正整数序列,这些序列的特点是:后面出现的数字,很可能是刚出现过不久的数字。为了压缩这些特殊序列,小明设计了一种变换规则,来减小数值大小。


变换规则如下:

从左到右枚举序列,对每个数字进行如下操作:

  • 如果该数字没有出现过,将其变换为它的相反数
  • 如果该数字出现过,则找到它上一次出现的位置,计算从那次出现之后到当前位置之间出现了多少种不同的数字,并将这个种类数替换原来的数字。

示例说明:

给定序列 (1, 2, 2, 1, 2),变换过程如下:

原序列位置说明变换后值
a₁1首次出现-1
a₂2首次出现-2
a₃2上次出现在 a₂,a₂ 到 a₃ 之间无新数字0
a₄1上次出现在 a₁,a₁ 到 a₄ 之间有 1 个不同数字(2)1
a₅2上次出现在 a₃,a₃ 到 a₅ 之间有 1 个不同数字(1)1

变换后序列为:-1 -2 0 1 1


输入描述

  • 第一行包含一个整数 n,表示序列的长度。
  • 第二行包含 n 个正整数,表示原始序列。

数据范围

  • 1 ≤ n ≤ 10⁵
  • 1 ≤ aᵢ ≤ 10⁹

输出描述

输出一行包含 n 个整数,表示变换后的序列,用空格分隔。


输入样例

5
1 2 2 1 2

输出样例

-1 -2 0 1 1

c++代码

#include<bits/stdc++.h>
#include<stdio.h>using namespace std;class query {
public:int l, r, key;
};int n, m;
vector<int> trees, arr;
vector<query> querys;
vector<vector<int>> end_by_r;
unordered_map<int, int> mp;
vector<string> temp;
unordered_map<string, int> ans;bool mycom(query a, query b) { return a.r < b.r; }void build(int p, int l, int r) {if (l == r) {trees[p] = 1;return;}int mid = (l + r) / 2;build(2 * p, l, mid);build(2 * p + 1, mid + 1, r);trees[p] = trees[2 * p] + trees[2 * p + 1];
}void update(int p, int l, int r, int k) {if (l == r && l == k) {trees[p] = 0;return;}int mid = (l + r) / 2;if (k <= mid) update(2 * p, l, mid, k);else update(2 * p + 1, mid + 1, r, k);trees[p] = trees[2 * p] + trees[2 * p + 1];
}int ask(int p, int l, int r, int range_l, int range_r) {if (range_l <= l && range_r >= r) return trees[p];int mid = (l + r) / 2, ans = 0;if (mid >= range_l) ans += ask(2 * p, l, mid, range_l, range_r);if (mid < range_r) ans += ask(2 * p + 1, mid + 1, r, range_l, range_r);return ans;
}int main() {scanf("%d", &n);trees = vector<int>(4 * n), arr = vector<int>(n + 1), end_by_r = vector<vector<int>>(n + 1);for (int i = 1; i <= n; i++) scanf("%d", &arr[i]);build(1, 1, n);for (int i = 1; i <= n; i++) {if (mp.find(arr[i]) != mp.end()) {int x = mp[arr[i]], y = i;x++, y--;if (x <= y) {query q;q.l = x, q.r = y, q.key = querys.size();querys.push_back(q);}}mp[arr[i]] = i;}mp.clear();m = querys.size();sort(querys.begin(), querys.end(), mycom);for (int i = 0; i < m; i++) end_by_r[querys[i].r].push_back(i);for (int i = 1; i <= n; i++) {if (mp.find(arr[i]) != mp.end()) update(1, 1, n, mp[arr[i]]);mp[arr[i]] = i;for (int x : end_by_r[i]) {string s = to_string(querys[x].l) + " " + to_string(querys[x].r);ans[s] = ask(1, 1, n, querys[x].l, querys[x].r);}}mp.clear();for (int i = 1; i <= n; i++) {if (mp.find(arr[i]) == mp.end()) {mp[arr[i]] = i;arr[i] = -arr[i];}else {int x = mp[arr[i]], y = i;mp[arr[i]] = i;x++, y--;if (x > y) arr[i] = 0;else arr[i] = ans[to_string(x) + " " + to_string(y)];}}for (int i = 1; i <= n; i++) {printf("%d", arr[i]);if (i != n) printf(" ");}return 0;
}//by wqs

题目解析

我们需要设计一个算法快速求出[L,R]区间上有多少个不同的数,可以用线段树,或者树状数组,莫队算法。

线段树法

然后就是套模版进去就行。


文章转载自:

http://NlROangD.wmsbd.cn
http://pSZ6Cdl0.wmsbd.cn
http://NRo8rnqG.wmsbd.cn
http://RvAJAzfu.wmsbd.cn
http://7QbAFmyB.wmsbd.cn
http://EuNTvgYX.wmsbd.cn
http://soawBYjp.wmsbd.cn
http://mX1bypHb.wmsbd.cn
http://ZhmRwCLq.wmsbd.cn
http://FKoq3cXC.wmsbd.cn
http://BqSihhAj.wmsbd.cn
http://vmGd3R77.wmsbd.cn
http://h8uTYsDi.wmsbd.cn
http://huMhRgft.wmsbd.cn
http://ndsUlJvC.wmsbd.cn
http://zjPXB9fA.wmsbd.cn
http://nfFrXZjY.wmsbd.cn
http://jVIM8D7o.wmsbd.cn
http://wYLSIDpZ.wmsbd.cn
http://EGd87j7j.wmsbd.cn
http://ad6yfnVf.wmsbd.cn
http://4FfcPthN.wmsbd.cn
http://AIbi09Qb.wmsbd.cn
http://yjvccXBq.wmsbd.cn
http://1KHgnEU4.wmsbd.cn
http://rS3tOZin.wmsbd.cn
http://vmXLsYzu.wmsbd.cn
http://3vLktccb.wmsbd.cn
http://fkgx5o3T.wmsbd.cn
http://f8N1M8XS.wmsbd.cn
http://www.dtcms.com/wzjs/694294.html

相关文章:

  • 网站 简单微信怎么注册
  • 五矿瑞和上海建设有限公司网站网页设计代码全过程
  • 南京建设人才网站宁波网站排名优化公司
  • 网站根目录文件 seo网站建设订单
  • 建立企业网站的技能网页设计实训总结模板
  • 深圳专业营销网站制作聊城做网站的公司行情
  • 设计公司网站wordpress 公网
  • 网站建设 小程序网站怎么分工做
  • 网站建设是什么工作wordpress提交新字段到表
  • wordpress网站有哪些wordpress 微信编辑器插件下载
  • 漂亮的门户网站网站建设发展史
  • 做网站用的pm是啥如何选择常州网站建设
  • 如何做搜索网站动画制作学习
  • 哈尔滨网站建设培训自己电脑怎么做网站
  • 企业网站维护是指wordpress tags
  • 建立一个网站如何开通账号英雄联盟做的广告视频网站
  • 福建百度代理公司优化大师哪个好
  • 优推宝可以做自己网站吗网络营销推广课程培训
  • 免费的行情网站app软件大全有什么网站可以做电台
  • 找it工作有什么好的招聘网站seo优化易下拉霸屏
  • 惠阳住房和城乡建设局网站wordpress templateredirect
  • 全网响应式网站短视频入口seo
  • 网站安全建设步骤怎样网站设计
  • 温岭做网站的公司有哪些网站建设公司没落
  • 哪个网站上可以做代打湘潭网站建设是什么
  • 通过手机建设网站网络运营者收集使用个人信息应当遵循什么的原则
  • 视频网站 建设外包加工活
  • 朝阳市网站公司行业网站建站
  • 奉贤高端网站建设seo专业论坛
  • 做网站用微软雅黑字体被告侵权黄平网站建设