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 ...
随机推荐
- Spark内核解析
Spark内核概述 Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核 ...
- spring cloud gateway 日志打印
从api请求中获取访问的具体信息,是一个很常见的功能,这几天在研究springcloud,使用到了其中的gateway,刚好将研究的过程结果都记录下来 0. Version <parent> ...
- JavaScript中的原型、原型链、原型模式
今天,咱来聊聊JavaScript中的原型跟原型链 原型跟原型模式 这一块的知识,主要是设计模式方面的. 首先,我们知道JavaScript是面向对象的.既然是面向对象,那它自然也有相应的类跟对象等概 ...
- 【Linux】vim关闭终端的时候,忘记退出vim怎么办
有些时候经常是关闭终端,但是忘记退出vim编辑的文本,每次登陆的时候会提示这个错误 其实很简单,在该文本的路径下,有一个隐藏文件 叫.xxx.txt.swp文件(xxx就是你退出忘记关闭的文件名). ...
- Dubbo中的统一契约是如何实现的?
写在前面 之前,很多小伙伴私信我:如何才能快速的掌握Dubbo的核心原理和源码.所以,我写了一篇<我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?>.对于Dubbo的源码解析系 ...
- SpringBoot快速掌握(1):核心技术
SpringBoot快速掌握(1):核心技术 SpringBoot快速掌握(1):核心技术 SpringBoot快速掌握(1):核心技术 SpringBoot快速掌握(1):核心技术 SpringBo ...
- [Usaco2016 Dec]Counting Haybales
原题链接https://www.lydsy.com/JudgeOnline/problem.php?id=4747 先将原数组排序,然后二分查找即可.时间复杂度\(O((N+Q)logN)\). #i ...
- Development desciptor
概述与作用: 部署描述符是用于描述Web应用程序的元数据,并为Java EE Web应用程序服务器部署和运行Web应用程序提供指令.从传统上来说,所有元数据都来自于部署描述符文件/WEB-INF/we ...
- 前端知识(一)04 Vue.js入门-谷粒学院
目录 一.介绍 1.Vue.js 是什么 2.初识Vue.js 二.基本语法 1.基本数据渲染和指令 2.双向数据绑定 3.事件 4.修饰符 5.条件渲染 6.列表渲染 7.实例生命周期 一.介绍 1 ...
- windows中使用django时报错:A server error occurred. Please contact the administrator.
这是因为在视图函数中使用了get函数,获取了不存在的数据例如:数据库中不存在一条name为hello1的数据,使用如下语句访问message = Message.objects.get(name='h ...