原题链接: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. vlunhub笔记(二)earth

    (一)信息收集 开始扫描目标机ip,目标机ip:192.168.241.135 arp-scan -l 直接访问目标  ip 192.168.241.135   发现400报错 只能先去考虑扫一下信息 ...

  2. 国标GB28181视频平台EasyGBS视频监控平台无法播放,抓包返回ICMP排查过程

    国标GB28181视频平台EasyGBS是基于国标GB/T28181协议的行业内安防视频流媒体能力平台,可实现的视频功能包括:实时监控直播.录像.检索与回看.语音对讲.云存储.告警.平台级联等功能.国 ...

  3. 只要学会这些AI工具,一个人就是一家营销咨询公司

    随着AI工具的不断涌现,您只需掌握市面上热门的AI工具,便可独自开展营销咨询公司.通过一系列AI工具,您可以为企业提供全案服务,收获丰厚回报. 例如,在协助一家美妆初创公司出海时,我们运用一系列AI工 ...

  4. 《Linux基础》03. 运行级别 · 实用指令

    @ 目录 1:运行级别 2:帮助指令 2.1:man 2.2:help 3:文件目录指令 3.1:pwd 3.2:ls 3.3:cd 3.4:mkdir 3.5:rmdir 3.6:touch 3.7 ...

  5. 《Linux基础》01. 概述

    @ 目录 1:Linux的应用领域 1.1:个人桌面领域的应用 1.2:服务器领域 1.3:嵌入式领域 2:Linux介绍 3:Linux和Unix的关系 4:Linux基本规则 Linux介绍 1: ...

  6. 《SQL与数据库基础》07. 约束

    目录 约束 常见约束案例 外键约束 删除/更新行为 本文以 MySQL 为例 约束 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据. 目的:保证数据库中数据的正确性.有效性和完整性. 分 ...

  7. wget 命令的使用:HTTP文件下载、FTP文件下载--九五小庞

    1. wget 命令简介与安装wget是用于在命令行终端下载网络文件的开源免费的命令工具,支持 HTTP/HTTPS.FTP/FTPS 协议的下载.wget 与 curl 相似,curl 可以理解为是 ...

  8. WPF学习 - 闭坑(持续更新)

    坑1:自定义控件设计原则: 既然称之为控件,那么就必定有界面与行为两部分. 界面就是展示给用户看的,用于承载类的属性.方法.事件等. 行为就是类的方法,以及这些方法需要用到的属性.字段等. WPF设计 ...

  9. Solution -「洛谷 P1852」跳跳棋

    Description Link. 在一个数轴上给你三个点,移动方法是彼此为中点进行跳跃,不能同时越过两颗棋子. 给出初始状态和目标状态,问能否从初始状态跳到目标状态.若能,输出最少步数. 棋子之间互 ...

  10. ORA-01008:并非所有变量都已绑定-解决办法

    近期批量处理数据,后台用JAVA编写,连接Oracle数据库,程序运行报ORA-01008问题.解决这个问题时遇见的坑较多,下面复盘现象.问题提出解决办法,希望能帮到遇见同类问题的你. 调试问题: 后 ...