ABC393F题解
大概评级:绿。
一看到这种题目,就知道肯定是数据结构题,我们首先用一个众所周知的二分来求出 \(pos\) 数组,\(pos_i\) 表示以 \(i\) 结尾的最长上升子序列的大小,然后将询问离线,弄一个 vector,命名 \(s\),把询问中每个 \(R_i\) 为 \(i(1 \le i \le n)\) 的询问存进 \(s_i\) 中,然后遍历每个 \(i(1 \le i \le n)\),每次先修改动态开点权值线段树上的点 \(a_i\),将它改为 \(pos_i\),然后遍历 \(s_i\),将 \(s_i\) 中存储的询问全部拿出来,然后查询即可。
总时间复杂度:\(O(n+n \log n+q+q \log q) = O(n \log n+q \log q)\)。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e7+5;
int a[N];
int low[N];
int pos[N];
struct node
{
int l;
int r;
int ls;
int rs;
int maxx;
}t[N];
struct node1
{
int x;
int y;
};
vector<node1>e[N];
int cnt;
void update(int &rt,int l,int r,int x,int v)
{
if(!rt)
{
rt = ++cnt;
t[rt].l = l;
t[rt].r = r;
}
if(t[rt].l == t[rt].r)
{
t[rt].maxx = max(t[rt].maxx,v);
return;
}
int mid = t[rt].l+t[rt].r>>1;
if(x<=mid)
{
update(t[rt].ls,l,mid,x,v);
}
else
{
update(t[rt].rs,mid+1,r,x,v);
}
t[rt].maxx = max(t[t[rt].ls].maxx,t[t[rt].rs].maxx);
}
int query(int rt,int l,int r)
{
if(!rt)
{
return 0;
}
if(l<=t[rt].l&&t[rt].r<=r)
{
return t[rt].maxx;
}
int mid = t[rt].l+t[rt].r>>1,maxx = 0;
if(l<=mid)
{
maxx = max(maxx,query(t[rt].ls,l,r));
}
if(r>mid)
{
maxx = max(maxx,query(t[rt].rs,l,r));
}
return maxx;
}
int ans[N];
signed main()
{
int n,_,o = 0;
scanf("%d %d",&n,&_);
for(int i = 1;i<=n;i++)
{
scanf("%d",&a[i]);
}
int id = 0;
for(int i = 1;i<=n;i++)
{
if(a[i]>low[id])
{
low[++id] = a[i];
pos[i] = id;
}
else
{
int poss = lower_bound(low+1,low+id+1,a[i])-low;
low[poss] = a[i];
pos[i] = poss;
}
}
for(int i = 1;i<=_;i++)
{
int x,y;
scanf("%d %d",&x,&y);
e[x].push_back({i,y});
}
for(int i = 1;i<=n;i++)
{
update(o,1,1e9,a[i],pos[i]);
for(auto it:e[i])
{
ans[it.x] = query(o,1,it.y);
}
}
for(int i = 1;i<=_;i++)
{
printf("%d\n",ans[i]);
}
return 0;
}
总结:这道题的精髓在于将询问离线。
ABC393F题解的更多相关文章
- 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 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
- JSOI2016R3 瞎BB题解
题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...
随机推荐
- MySQL 时区与 serverTimezone
TL;DR 手动为 MySQL 指定非偏移量的时区,以避免 TIMESTAMP 类型夏令时问题和时区转化性能瓶颈 TIMESTAMP 范围:'1970-01-01 00:00:01' UTC to ' ...
- 【C语言】【二级】将所指字符串中所有下标为奇数位置上的字母转换成大写
题目 请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换成大写(若该位置上不是字母,则不转换). 例如,若输入" abc4EFG",则应输出&quo ...
- Harbor 入门指南
Harbor 介绍 Harbor 是由 VMware 开源的一款云原生制品仓库,Harbor 的核心功能是存储和管理 Artifact.Harbor 允许用户用命令行工具对容器镜像及其他 Artifa ...
- Qt编写可视化大屏电子看板系统16-标准柱状图
一.前言 标准柱状图是大屏系统中最常用的一种展示数据效果图,提供不同的柱子显示数据值,在QCustomPlot的基础上拓展了顶部显示对应的值,不同的柱子不同的颜色,同时还可以调用内置的触发报警颜色的机 ...
- OpenMMLab AI实战营 第六课笔记
OpenMMLab AI实战营 第六课笔记 目录 OpenMMLab AI实战营 第六课笔记 1.什么是语义分割 1.1 语义分割的应用 1.1.1 应用:无人驾驶汽车 1.1.2 应用:人像分割 1 ...
- 中间件 vs 过滤器
在 ASP.NET Core 中,中间件(Middleware) 和 过滤器(Filters) 是两种不同的机制,用于处理请求和响应的管道.它们的作用和适用场景有所不同,以下是它们的对比和详细说明: ...
- Zookeeper、Eureka、Consul、Nacos、Etcd全方位对比
前三篇博文分别记录了Eureka.Zookeeper.Consul三个服务中心,那么他们之前有何区别呢? 一: 因为不会同时存在或者同时满足C.A.P三个方面,所以只能存在cp,ap,ca三种体系, ...
- ClustrixDB-new数据库
ClustrixDB是一种集群式RDBMS,可确保事务处理符合ACID特性,同时可轻松的提供可扩展性和容错能力. ClustrixDB集群由三个或更多节点(联网的同构服务器)组成.ClustrixDB ...
- 在日常工作和生活中使用Linux-开篇
前言 欢迎来到<在日常工作和生活中使用Linux>的系列分享.在这个系列中,我们将探讨为什么选择Linux,以及如何在日常工作和生活中高效地使用它.无论你是刚刚接触Linux的新手,还是希 ...
- 0511-Properties集合
package A10_IOStream; import java.io.*; import java.util.Properties; import java.util.Set; /* java.u ...