CF961E Tufurama题解
我们维护一个存储下标数据的树状数组,先将 \(1\sim n\) 插入树状数组。
用 \(a\) 表示原数组,\(b\) 表示按照 \(a_i\) 排序后的数组。
我们从 \(1\) 开始统计,直到 \(n\),统计时:
将 \(i\) 删除,不能把自己算进去。
为了排除 \(a_j < i\) 的部分,可以从前往后扫描 \(b\),一直删,直到 \(b_{\text{cur}} \geq i\),
因为 \(b\) 单调不下降,所以 \(i\) 都用不着了, \(i + 1\) 也用不着了。
调查 \(a_i \geq j\) 的部分,调用 \(\text{query}(a_i)\) 即可。
注意:排除的时候用 \(b\),这样就不用遍历整个 \(a\) 数组来排除 \(a_j < i\) 的部分;
而询问的时候要用 \(a\),因为询问的是 \(a_i \geq j\) 的部分。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
using i64 = long long;
const int N = 200010;
int tr[N];
void add(int x, int v) {
for (; x < N; x += x & -x) tr[x] += v;
}
int ask(int x) {
int res = 0;
for (; x; x -= x & -x) res += tr[x];
return res;
}
int n;
int a[N];
struct Node {
int id;
int v;
}b[N];
bool del[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
b[i].id = i;
b[i].v = a[i];
}
for (int i = 1; i <= n; i++) add(i, 1);
sort(b + 1, b + n + 1, [](const Node& a, const Node& b) { return a.v < b.v; });
int cur = 1;
i64 ans = 0;
for (int i = 1; i <= n; i++) {
if (!del[i]) del[i] ^= 1, add(i, -1);
while (b[cur].v < i && cur <= n) {
if (!del[b[cur].id]) del[b[cur].id] ^= 1, add(b[cur].id, -1);
cur++;
}
ans += ask(min(n, a[i]));
}
cout << ans << '\n';
return 0;
}
CF961E Tufurama题解的更多相关文章
- CF961E Tufurama【主席树】
CF961E Tufurama 题意翻译 题目描述 有一天Polycarp决定重看他最喜爱的电视剧<Tufurama>.当他搜索“在线全高清免费观看Tufurama第3季第7集”却只得到第 ...
- [CF961E] Tufurama
Description: 有一天Polycarp决定重看他最喜爱的电视剧<Tufurama>.当他搜索"在线全高清免费观看Tufurama第3季第7集"却只得到第7季第 ...
- CF961E Tufurama 树状数组
E. Tufurama One day Polycarp decided to rewatch his absolute favourite episode of well-known TV seri ...
- 【树状数组】CF961E Tufurama
挺巧妙的数据结构题(不过据说这是一种套路? E. Tufurama One day Polycarp decided to rewatch his absolute favourite episode ...
- CF961E Tufurama 主席树
对原问题进行转化 考虑对每个$i$,询问在$j \in [i + 1, a[i]]$中满足$a[j] \geqslant i$的个数 这样子可以做到不重不漏 个数满足差分的性质,使用主席树来维护即可 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
随机推荐
- 太坑了吧!一次某某云上的redis读超时排查经历
一次排查某某云上的redis读超时经历 性能排查,服务监控方面的知识往往涉及量广且比较零散,如何较为系统化的分析和解决问题,建立其对性能排查,性能优化的思路,我将在这个系列里给出我的答案. 问题背景 ...
- python:模拟购票的小程序
问题描述:小白学习python的第N天,继续练习.做一个模拟购票的小程序,没有用数据库和文件来存储数据,只是能够单词选择. # hzh 每天进步一点点 # 2022/5/13 17:24 import ...
- Generative Pre-trained Transformer(GPT)模型技术初探
一.Transformer模型 2017年,Google在论文 Attention is All you need 中提出了 Transformer 模型,其使用 Self-Attention 结构取 ...
- C++11强制类型转换
C++ 强制类型转换有四种关键字:static_cast.const_cast.reinterpret_cast和dynamic_cast.它们用于不同的情况和目的,比C语言的强制类型转换更清晰和安全 ...
- abp(net core)+easyui+efcore实现仓储管理系统——模块管理升级之上(六十一)
Abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...
- 一天吃透Redis面试八股文
Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库.与传统数据库不同的是,Re ...
- 关于 static
由static定义的被称为类属性 例如( static String company = "博客园" ) 类方法 例如( public static void printCo ...
- Oracle之table()函数的使用,提高查询效率
目录 一.序言 二.table()函数使用步骤 三.table() 具体使用实例 3.1 table()结合数组 使用 3.2 table()结合PIPELINED函数(这次报表使用的方式) 3.3 ...
- selenium 多窗口处理与网页frame
多窗口处理 点击某些链接,会重新打开一个窗口,对于这种情况.想在薪页面操作,就得先切换窗口了. 获取窗口得唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面进行操作了 1. 先获取到当前得窗口句 ...
- 音视频八股文(9)-- flv的h264六层结构和aac六层结构
flv介绍 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积⼩.封装简单等特点,⾮常适合于互联⽹上使⽤.⽬前主流的视频⽹站基本都⽀持FLV.采⽤FLV ...