原题链接:E - LEQ

思路:

题目要求对于从数组1~n找出所有符合开头数字小于等于结尾数字的子序列,\(A' = (A_1', A_2', ... , A_k')\),满足\(A_1' \leq A_k'\),很显然,我们只需要找到任何一对\(a_i \leq a_j\)数对,然后它的贡献是\(2^{j -i - 1}\),我们可以两重循环很容易做到,但是很明显数据范围不允许,这时候考虑,将\(2^{j -i - 1}\)变成\(\cfrac{2^{j - 1}}{2^i}\),那么答案就是\(\sum\limits_{j = 1}^N 2^{j - 1} * B_j\),其中\(B_j\)是\(\sum\limits_{1 \leq i < j, a[i] <= a[j]} \cfrac{1}{2^i}\),对于\(2^{j - 1}\)可以直接用快速幂求解,而对于\(B_j\)我们可以直接用树状数组进行维护,这样复杂度就由\(O(n^2)\)优化为了\(O(NlogN)\),又由于涉及取模,因为除法不能直接取模,所以求\(2^i\)的逆元即可。

哦对了,由于使用树状数组,所以先离散化一下。

// Problem: E - LEQ
// Contest: AtCoder - AtCoder Beginner Contest 221
// URL: https://atcoder.jp/contests/abc221/tasks/abc221_e
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org) #include <bits/stdc++.h> typedef long long LL; using namespace std;
const int N = 3E5 + 10, Mod = 998244353;
LL tr[N];
int a[N], n;
vector<int> alls; LL lowbit(LL x) {
return x & -x;
} void modify(int x, LL v) { //从下往上加
for (;x < N; x += lowbit(x)) tr[x] = (tr[x] + v) % Mod;
} LL query(int x) {
LL res = 0;
for (;x ; x -= lowbit(x)) res = (res + tr[x]) % Mod;
return res;
} LL qpow(LL a, LL b, LL Mod) {
LL res = 1;
while (b) {
if (b & 1) res = res * a % Mod;
a = a * a % Mod;
b >>= 1;
}
return res;
} int find(int x) {
return lower_bound(alls.begin(), alls.end(), x) - alls.begin() + 1;
} int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
alls.push_back(a[i]);
} sort(alls.begin(), alls.end());
alls.erase(unique(alls.begin(), alls.end()), alls.end()); LL res = 0;
for (int i = 1; i <= n; i++) {
int x = find(a[i]);
res = (res + qpow(2, i - 1, Mod) * query(x) % Mod) % Mod; LL t = qpow(2, i, Mod);
modify(x, qpow(t, Mod - 2, Mod));
} cout << res << endl; return 0;
}

Atcoder abc 221 E - LEQ的更多相关文章

  1. ATCODER ABC 099

    ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...

  2. Atcoder ABC 141

    Atcoder ABC 141 A - Weather Prediction SB题啊,不讲. #include<iostream> #include<cstdio> #inc ...

  3. Atcoder ABC 139E

    Atcoder ABC 139E 题意: n支球队大循环赛,每支队伍一天只能打一场,求最少几天能打完. 解法: 考虑抽象图论模型,既然一天只能打一场,那么就把每一支球队和它需要交手的球队连边. 求出拓 ...

  4. Atcoder ABC 139D

    Atcoder ABC 139D 解法: 等差数列求和公式,记得开 $ long long $ CODE: #include<iostream> #include<cstdio> ...

  5. Atcoder ABC 139C

    Atcoder ABC 139C 题意: 有 $ n $ 个正方形,选择一个起始位置,使得从这个位置向右的小于等于这个正方形的高度的数量最多. 解法: 简单递推. CODE: #include< ...

  6. Atcoder ABC 139B

    Atcoder ABC 139B 题意: 一开始有1个插口,你的插排有 $ a $ 个插口,你需要 $ b $ 个插口,问你最少需要多少个插排. 解法: 暴力模拟. CODE: #include< ...

  7. Atcoder ABC 139A

    Atcoder ABC 139A 题意: 给你两个字符串,记录对应位置字符相同的个数 $ (n=3) $ 解法: 暴力枚举. CODE: #include<iostream> #inclu ...

  8. atcoder abc 244

    atcoder abc 244 D - swap hats 给定两个 R,G,B 的排列 进行刚好 \(10^{18}\) 次操作,每一次选择两个交换 问最后能否相同 刚好 \(10^{18}\) 次 ...

  9. AtCoder ABC 250 总结

    AtCoder ABC 250 总结 总体 连续若干次一样的结果:30min 切前 4 题,剩下卡在 T5 这几次卡在 T5 都是一次比一次接近, 什么 dp 前缀和打挂,精度被卡,能水过的题连水法都 ...

  10. AtCoder ABC 242 题解

    AtCoder ABC 242 题解 A T-shirt 排名前 \(A\) 可得 T-shirt 排名 \([A+1,B]\) 中随机选 \(C\) 个得 T-shirt 给出排名 \(X\) ,求 ...

随机推荐

  1. Django: django.core.exceptions.ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "game-detail".

    错误原因:在序列化时,使用了参数`url`,但在`urls.py`文件中,没有使用命名 # urls.py from django.urls import path from RESTSerializ ...

  2. 手写promise之分步解析

    promise是es6推出适用于异步请求的构造函数,帮助解决回调地狱的问题,以下内容将自定义实现promise,只包括基本使用,所以一些边界情况考虑没有在内. 如果对promise用法还不熟悉的朋友可 ...

  3. call与retn指令

    一. call指令 将call指令下一跳指令压入栈中 jmp跳转到call指令的地址 二. retn指令 pop指令将栈顶元素弹出存储 jmp跳转到该栈顶元素地址 retn n;表示再前两步操作的基础 ...

  4. SSM登录操作

    1.编写实体类 略 2. 写mapper映射文件 通过名字查询 通过ID主键查询... 略 写dao CRUD相关抽象方法 List<Student> getAll(); Student ...

  5. 完全卸载MySQL服务的方法

    1. 重新运行安装文件,单击remove移除mysql.此时安装目录中的文件没有完全移除,需要手动删除安装目录的Mysql文件夹. 2. 如果MySQL服务没有移除的话,以管理员方式运行cmd命令:s ...

  6. Linux虚拟机安装及下载

    centos 7操作系统下载及安装步骤 (仅供参考) 下载: 1.打开如下网站:先下载镜像文件 ping:https://www.centos.org/download/ 2.进入到如下界面 3.然后 ...

  7. 开源XL-LightHouse与Flink、ClickHouse之类技术相比有什么优势

    Flink是一款非常优秀的流式计算框架,而ClickHouse是一款非常优秀的OLAP类引擎,它们是各自所处领域的佼佼者,这一点是毋庸置疑的.Flink除了各种流式计算场景外也必然可以用于流式统计,C ...

  8. Vue源码学习(五):<templete>渲染第四步,生成虚拟dom并将其转换为真实dom

    好家伙,   前情提要: 在上一篇我们已经成功将ast语法树转换为渲染函数  现在我们继续   1.项目目录 代码已开源https://github.com/Fattiger4399/analytic ...

  9. Solution Set -「CSP-S 2020」

    Problem. 1 - Junior Julian 模拟模拟模拟摸死 CTR 的母. 考场代码: #include<cstdio> namespace solveIt { void re ...

  10. Python 潮流周刊#21:如何提升及测量 Python 代码的性能?

    你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,大部分为英文.标题取自其中三则分享,不代表全部内容都是该主题,特此声明. 本周刊由 Python猫 出品,精心筛选国内外的 25 ...