HDU6703 array (线段树)
题意:长为1e5的全排列 有两个操作 把一个数删掉
询问1,r这个区间内 找到一个数大于等于x 且这个数不等于区间内的所有数
题解:建一颗权值线段树 线段树里存值为i的数在原数组中的坐标 维护坐标的最大值
考虑删除操作 就等于让他的坐标变为n+1 因为答案一定在1-n+1
对于查询操作 等价于找在[x,n]这个权值区间内左边第一个出现的数 且他的坐标是大于r的
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5; int n, m;
int a[MAXN], b[MAXN];
int pos[MAXN << 2]; void pushup(int rt) {
pos[rt] = max(pos[rt << 1], pos[rt << 1 | 1]);
} void build(int l, int r, int rt) {
if(l == r) {
pos[rt] = b[l];
return;
} int mid = l + r >> 1;
build(l, mid, rt << 1);
build(mid + 1, r, rt << 1 | 1);
pushup(rt);
} void update(int k, int l, int r, int rt) {
if(l == r) {
pos[rt] = n + 1;
return;
} int mid = l + r >> 1;
if(k <= mid) update(k, l, mid, rt << 1);
else update(k, mid + 1, r, rt << 1 | 1);
pushup(rt);
} int query(int ql, int qr, int k, int l, int r, int rt) {
int mid = l + r >> 1;
if(ql <= l && qr >= r) {
if(l == r) {
if(pos[rt] > k) return l;
else return n + 1;
} if(pos[rt << 1] > k) return query(ql, qr, k, l, mid, rt << 1);
if(pos[rt << 1 | 1] > k) return query(ql, qr, k, mid + 1, r, rt << 1 | 1);
return n + 1;
} if(qr <= mid) return query(ql, qr, k, l, mid, rt << 1);
if(ql > mid) return query(ql, qr, k, mid + 1, r, rt << 1 | 1);
return min(query(ql, qr, k, l, mid, rt << 1), query(ql, qr, k, mid + 1, r, rt << 1 | 1));
} int main() {
int T;
scanf("%d", &T);
while(T--) {
int las = 0;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]), b[a[i]] = i;
build(1, n, 1);
for(int i = 1; i <= m; i++) {
int opt, x, y;
scanf("%d%d", &opt, &x); x ^= las;
if(opt == 1) update(a[x], 1, n, 1);
else {
scanf("%d", &y); y ^= las;
printf("%d\n", las = query(y, n, x, 1, n, 1));
}
}
}
return 0;
}
HDU6703 array (线段树)的更多相关文章
- 2019ccpc网络赛hdu6703 array(线段树)
array 题目传送门 解题思路 操作1是把第pos个位置上的数加上\(10^7\),操作2是找到区间[1,r]中没有且大于k的最小的数.注意到k的范围是小于等于n的,且n的范围是\(10^5\),远 ...
- [Codeforces 266E]More Queries to Array...(线段树+二项式定理)
[Codeforces 266E]More Queries to Array...(线段树+二项式定理) 题面 维护一个长度为\(n\)的序列\(a\),\(m\)个操作 区间赋值为\(x\) 查询\ ...
- 【Codeforces718C】Sasha and Array 线段树 + 矩阵乘法
C. Sasha and Array time limit per test:5 seconds memory limit per test:256 megabytes input:standard ...
- codeforces 719E E. Sasha and Array(线段树)
题目链接: E. Sasha and Array time limit per test 5 seconds memory limit per test 256 megabytes input sta ...
- Codeforces 482B Interesting Array(线段树)
题目链接:Codeforces 482B Interesting Array 题目大意:给定一个长度为N的数组,如今有M个限制,每一个限制有l,r,q,表示从a[l]~a[r]取且后的数一定为q,问是 ...
- Codeforces 1114F Please, another Queries on Array? 线段树
Please, another Queries on Array? 利用欧拉函数的计算方法, 用线段树搞一搞就好啦. #include<bits/stdc++.h> #define LL ...
- Codeforces Round #275 Div.1 B Interesting Array --线段树
题意: 构造一个序列,满足m个形如:[l,r,c] 的条件. [l,r,c]表示[l,r]中的元素按位与(&)的和为c. 解法: 线段树维护,sum[rt]表示要满足到现在为止的条件时该子树的 ...
- 暑假集训单切赛第一场 CF 266E More Queries to Array(线段树+二项式展开式)
比赛时,第二题就是做的这个,当时果断没仔细考虑,直接用线段树暴力求.结果易想而知,超时了. 比赛后搜了搜题解,恍然大悟. 思路:显然用线段树,但是由于每次查询都会有变,所以不可能存储题目中的式子. ...
- Codeforces295A - Greg and Array(线段树的成段更新)
题目大意 给定一个序列a[1],a[2]--a[n] 接下来给出m种操作,每种操作是以下形式的: l r d 表示把区间[l,r]内的每一个数都加上一个值d 之后有k个操作,每个操作是以下形式的: x ...
随机推荐
- Java NIO 缓冲区 Buffer
缓冲区 Buffer 是 Java NIO 中一个核心概念,它是一个线性结构,容量有限,存放原始类型数据(boolean 除外)的容器. 1. Buffer 中可以存放的数据类型 java.nio.B ...
- 图像质量评估论文 | Deep-IQA | IEEETIP2018
主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, gr ...
- Oracle 锁表以及解锁
-- kill_exec 列为解锁的语句,copy出来执行即可.select 'alter system kill session ''' || s.sid || ',' || s.serial# | ...
- 【C++】《C++ Primer 》第十一章
第十一章 关联容器 关联容器和顺序容器的不同:关联容器中的元素时按照关键字来保存和访问的. 关联容器支持通过关键字来高效地查找和读取元素,基本的关联容器类型是 map和 set. 类型 map 和 m ...
- 计算机科学: 寄存器&内存
参考: [十分钟速成课:计算机科学]6.寄存器&内存 要想聊寄存器Latch,首先要聊内存.什么是内存? Memory,就是储存信息的东西. 我们都玩过单机游戏,如果突然关机,游戏结束但是没有 ...
- (二)数据源处理1-configparser读取.ini配置文件
import osimport configparsercurrent_path =os.path.dirname(__file__)#获取config当前文件路径config_file_path = ...
- 【Linux】java.io.IOException: error=24, Too many open files解决
linux系统中执行java程序的时候,如果打开文件超过了限制,就会报错: java.io.IOException: error=24, Too many open files 解决办法: 首先查看j ...
- 力软最新版本与.netCore版本
功能强大,直接上图: 加微信或QQ交流开发技术:25489181 netcore版本 版本优势: .NET Core是适用于 Windows.Linux 和 macOS 的免费.开源托管的计算机软件框 ...
- apijson简单使用
apijson简单使用 介绍 APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库.为简单的增删改查.复杂的查询.简单的事务操作 提供了完全自动化的 ...
- mysqldump 内存消耗
MySQL :: MySQL 8.0 Reference Manual :: 4.5.4 mysqldump - A Database Backup Program https://dev.mysql ...