CCPC 2019 网络赛 1002 array (权值线段树)
HDU 6703 array
题意:
给定一个数组 \(a_1,a_2, a_3,...a_n\) ,满足 \(1 \le a[i]\le n\) 且 \(a[i]\) 互不相同。
有两种操作:1. 将 \(a_{pos}\) 的值加上 100000000;2. 询问不等于任何 \(a[i], (1 \le i \le r)\) 且不小于 \(k\) 的最小值。
思路:
注意 \(n,k\) 的范围都不超过 100000,对于操作一,相当于删除了这个数(询问的答案一定在区间 \([k, n+1]\) 内)。
现在问题转化为:
求值在 \([k,n+1]\) 内并且坐标大于 \(r\) 的最小值。
我们用线段树节点表示 \(a_i\) 的值,每个节点维护当前区间 \([l, r]\) 的下标最大值。那么query每次先找左子树(下标更小),没找到再找右子树。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define lson rt<<1, l, mid
#define rson rt<<1|1, mid+1, r
const int maxn = 100010;
const int INF = 0x3f3f3f3f;
int tree[maxn<<2];
int arr[maxn];
int id[maxn];
void build(int rt, int l, int r) {
if(l==r) {
tree[rt] = id[l];
return;
}
int mid = (l+r)>>1;
build(lson);
build(rson);
tree[rt] = max(tree[rt<<1], tree[rt<<1|1]);
}
int query(int L, int R, int rt, int l, int r, int val) {
if(l==r) {
return l;
}
int ans = INF;
int mid = (l+r)>>1;
if(L<=mid && val<tree[rt<<1])
ans = query(L, R, lson, val);
if(ans!=INF) return ans;
if(mid<R && val<tree[rt<<1|1])
ans = query(L, R, rson, val);
return ans;
}
void update(int rt, int l, int r, int pos) {
if(l==r) {
tree[rt] = INF;
return;
}
int mid = (l+r)>>1;
if(pos<=mid)
update(lson, pos);
else
update(rson, pos);
tree[rt] = max(tree[rt<<1], tree[rt<<1|1]);
}
int n, m;
int main() {
int t; cin>>t;
while(t--) {
scanf("%d %d", &n, &m);
int len = 0;
for(int i=1;i<=n;i++) {
scanf("%d", &arr[i]);
id[arr[i]] = i;
len = max(len, arr[i]);
}
id[++len] = INF;
build(1, 1, len);
int ans = 0;
while(m--) {
int op;
scanf("%d", &op);
if(op==1) {
int pos;
scanf("%d", &pos);
pos = pos^ans;
update(1, 1, len, arr[pos]);
} else {
int r, k;
scanf("%d %d", &r, &k);
r = r^ans, k = k^ans;
ans = query(k, len, 1, 1, len, r);
printf("%d\n", ans);
}
}
memset(id, 0, sizeof(id));
}
return 0;
}
CCPC 2019 网络赛 1002 array (权值线段树)的更多相关文章
- hdu 6703 array(权值线段树)
Problem Description You are given an array a1,a2,...,an(∀i∈[1,n],1≤ai≤n). Initially, each element of ...
- Petya and Array (权值线段树+逆序对)
Petya and Array http://codeforces.com/problemset/problem/1042/D time limit per test 2 seconds memory ...
- 2019年CCPC网络赛 HDU 6703 array【权值线段树】
题目大意:给出一个n个元素的数组A,A中所有元素都是不重复的[1,n].有两种操作:1.将pos位置的元素+1e72.查询不属于[1,r]中的最小的>=k的值.强制在线. 题解因为数组中的值唯一 ...
- ccpc网赛 hdu6703 array(权值线段树
http://acm.hdu.edu.cn/showproblem.php?pid=6703 大意:给一个n个元素的数组,其中所有元素都是不重复的[1,n]. 两种操作: 将pos位置元素+1e7 查 ...
- 2019牛客训练赛第七场 C Governing sand 权值线段树+贪心
Governing sand 题意 森林里有m种树木,每种树木有一定高度,并且砍掉他要消耗一定的代价,问消耗最少多少代价可以使得森林中最高的树木大于所有树的一半 分析 复杂度分析:n 1e5种树木,并 ...
- 2019牛客多校第七场E Find the median 权值线段树+离散化
Find the median 题目链接: https://ac.nowcoder.com/acm/contest/887/E 题目描述 Let median of some array be the ...
- 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)
传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...
- 2019.01.14 bzoj5343: [Ctsc2018]混合果汁(整体二分+权值线段树)
传送门 整体二分好题. 题意简述:nnn种果汁,每种有三个属性:美味度,单位体积价格,购买体积上限. 现在有mmm个询问,每次问能否混合出总体积大于某个值,总价格小于某个值的果汁,如果能,求所有方案中 ...
- jzoj5986. 【WC2019模拟2019.1.4】立体几何题 (权值线段树)
传送门 题面 题解 不难看出每个点的大小为行列限制中较小的那一个(因为数据保证有解) 对于行的每个限制,能取到的个数是列里限制大于等于它的数的个数,同理,对于列是行里大于它的个数(这里没有等于,为了避 ...
随机推荐
- Number 的扩展
Number.parseInt(), Number.parseFloat() ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变. Numb ...
- 保护Laravel .env文件,防止直接访问
web服务器: Apache 服务器系统: Ubuntu 14.04 如果不是vhost的形式部署在服务器上,可能是可以通过 http://www.example.com/.env 查看到larave ...
- NX二次开发-算法篇-冒泡排序(例子:遍历所有点并排序)
NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_curve.h> #include <u ...
- NX二次开发-打开文件夹,并同时选中指定文件
NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_part.h> #include <at ...
- <Java编程思想>读书笔记(1)-对象导论、一切都是对象
1.面向对象编程:OOP (Object-oriented Programming) 2.Alan Kay 总结的面向对象语言5个基本特性: 1) 万物皆为对象 2) 程序是对象的集合,他们通过发送消 ...
- flutter 超出俩行点点点
Text( '${listItem["title"]}', overflow: TextOverflow.ellipsis, maxLines: 2, style: TextSty ...
- solr +zookeeper+tomcat 集群搭建
最近需要搭建一个cloudSolr集群,写下记录.基础环境是在centos6.5 64bit 3个下载地址: 1. 下载Solr-4.x http://lucene.apache.org/solr/d ...
- sql实现查询某个字段在哪个表里 及结构是什么
) --数据库名 ) set @dbname2='aab' select @str = ' SELECT 表名=d.name,字段名=a.name,序号=a.column_id, 标识=is_iden ...
- 转——调试寄存器 原理与使用:DR0-DR7
下面介绍的知识性信息来自intel IA-32手册(可以在intel的开发手册或者官方网站查到),提示和补充来自学习调试器实现时的总结. 希望能给你带去有用的信息. (DRx对应任意的一个调试寄存器. ...
- 无LoadLibrary获取指定模块基址
实际上,这块可以写成汇编,然后做远程注入用 方法 1.通过fs:[30h]获取当前进程的_PEB结构 2.通过_PEB的Ldr成员获取_PEB_LDR_DATA结构 3.通过_PEB_LDR_DATA ...