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

集团网站建设调研报告成都口碑最好的家装公司

集团网站建设调研报告,成都口碑最好的家装公司,科技画,清明节网页设计素材原题链接:https://codeforces.com/contest/2116/problem/B 题目背景: 给定两个长度为 n 的数组 p、q,他们都是0 ~ n - 1的排列。 构造一个数组 r , 。 思路: 直接暴力枚举的时间复杂度肯定是O(n^2)的,必然…
原题链接:https://codeforces.com/contest/2116/problem/B
题目背景:

       给定两个长度为 n 的数组 p、q,他们都是0 ~ n - 1的排列。

       构造一个数组 r , r_i = \max_{0 \leq j \leq i} \left(2^{p_j} + 2^{q_{i - j}}\right)

思路:

        直接暴力枚举的时间复杂度肯定是O(n^2)的,必然超时。

        通过观察可发现 2^a + 2^b \leq 2^{\max(a, b) + 1},因为2^a + 2^b \leq 2*2^{\max(a, b)} = 2^{\max(a, b) + 1}

因此我们通过这个对比来对比两个数对(a,b)、(c,d)谁更大:

  • 比较 \max(a, b)\max(c, d)(谁的大)。

  • 如果相等,再比较 \min(a, b) 和 \min(c, d)。 

        说人话就是如果a > b,2^a \geq 2 * 2 ^ b,所以直接选择两个数组前缀中最大的元素即可。

        具体实现就是,枚举 i 代表 r_i,pos1、pos2分别代表p、q中1 ~ i的最大值,每次判断如果p[pos1] == q[pos2] 输出更大的与之配对的即可,否则直接输出更大的即可。

时间复杂度:

        O(n)。

ac代码: 
#include <bits/stdc++.h>#define ioscc ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define me(a, x) memset(a, x, sizeof a)
#define all(a) a.begin(), a.end()
#define sz(a) ((int)(a).size())
#define pb(a) push_back(a)
using namespace std;typedef unsigned long long ull;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<vector<int>> vvi;
typedef vector<int> vi;
typedef vector<bool> vb;const int dx[4] = {-1, 0, 1, 0};
const int dy[4] = {0, 1, 0, -1};
const int MAX = (1ll << 31) - 1;
const int MIN = 1 << 31;
const int MOD = 998244353;
const int N = 1e5 + 10;template <class T>
ostream &operator<<(ostream &os, const vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cout << a[i] << ' ';return os;
}template <class T>
istream &operator>>(istream &in, vector<T> &a) noexcept
{for (int i = 0; i < sz(a) - 10; i++)std::cin >> a[i];return in;
}/* ----------------- 有乘就强转,前缀和开ll ----------------- */vi sqr(N);void init()
{sqr[0] = 1;for (int i = 1; i <= 1e5 + 1; ++i)sqr[i] = sqr[i - 1] * 2 % MOD;
}void solve()
{int n;cin >> n;vi p(n + 10), q(n + 10);cin >> p >> q;int pos1 = 0, pos2 = 0;for (int i = 0; i < n; ++i){if (p[i] > p[pos1]) // p前缀最大值pos1 = i;if (q[i] > q[pos2]) // q前缀最大值pos2 = i;if (p[pos1] == q[pos2])cout << (sqr[p[pos1]] + sqr[max(q[i - pos1], p[i - pos2])]) % MOD << ' ';else if (p[pos1] > q[pos2])cout << (sqr[p[pos1]] + sqr[q[i - pos1]]) % MOD << ' ';elsecout << (sqr[q[pos2]] + sqr[p[i - pos2]]) % MOD << ' ';}cout << endl;
}int main()
{ioscc;init();int T;cin >> T;while (T--)solve();return 0;
}

http://www.yayakq.cn/news/506612/

相关文章:

  • 上海网站备案信息微信商城网站开发
  • 珠海特价做网站哈尔滨企业建站网站开发
  • 门户网站需求济南学网站建设哪里好
  • 个人做地方民生网站电销外包怎么收费
  • asp.net怎么做网站北京计算机培训学校
  • 网站建设分金手指排名二六特殊字体
  • 怎么做淘宝网站赚钱网页游戏吃显卡还是cpu
  • 自适应模板网站电脑和手机都能浏览的网站开发
  • 实搜石家庄网站建设小程序无锡网站建设上海韵茵
  • 莱山网站建设海口网站制作案例
  • 买了域名就可以做网站批量上传网站产品
  • 重庆企业网站推广费用网站建设推广保举火13星
  • 网站建设课程实训报告国内网站排名
  • 江西网站做的好的企业文化wordpress发布文章
  • 石家庄网站设计工作室做外汇看哪个网站
  • 天津网站搭建在网站图片源代码alt写入关键词后为什么不显示只显示title内容
  • 微商城网站建设什么是网络营销促销?网络营销促销有何作用?
  • 做自媒体关注的网站app设计理念怎么写
  • 如何 网站优化做前端开发需要学什么
  • 建设网站需要从哪方面考虑网站页面如何设计图
  • 甘肃省建设局网站首页网站设计 评价 方法
  • 苏州园区手机网站制作黄骅招聘信息最新2022
  • 电脑网站建设策划书用自己的电脑做网站需要备案吗
  • 网站建设与用户需求分析商务网站推广目标有哪些
  • 旅游网站排名前5位的网店运营推广高级实训攻略
  • 沈阳手机网站开发沈阳h5网站建设
  • 关于网站建设的好处西安百度
  • 网站建设维护专员学校网站建设工作会议
  • 肇庆自助网站建设系统爱站网seo工具
  • 做网站 前端外包公司做网站