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 (权值线段树)的更多相关文章

  1. hdu 6703 array(权值线段树)

    Problem Description You are given an array a1,a2,...,an(∀i∈[1,n],1≤ai≤n). Initially, each element of ...

  2. Petya and Array (权值线段树+逆序对)

    Petya and Array http://codeforces.com/problemset/problem/1042/D time limit per test 2 seconds memory ...

  3. 2019年CCPC网络赛 HDU 6703 array【权值线段树】

    题目大意:给出一个n个元素的数组A,A中所有元素都是不重复的[1,n].有两种操作:1.将pos位置的元素+1e72.查询不属于[1,r]中的最小的>=k的值.强制在线. 题解因为数组中的值唯一 ...

  4. ccpc网赛 hdu6703 array(权值线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=6703 大意:给一个n个元素的数组,其中所有元素都是不重复的[1,n]. 两种操作: 将pos位置元素+1e7 查 ...

  5. 2019牛客训练赛第七场 C Governing sand 权值线段树+贪心

    Governing sand 题意 森林里有m种树木,每种树木有一定高度,并且砍掉他要消耗一定的代价,问消耗最少多少代价可以使得森林中最高的树木大于所有树的一半 分析 复杂度分析:n 1e5种树木,并 ...

  6. 2019牛客多校第七场E Find the median 权值线段树+离散化

    Find the median 题目链接: https://ac.nowcoder.com/acm/contest/887/E 题目描述 Let median of some array be the ...

  7. 2019.01.21 bzoj2441: [中山市选2011]小W的问题(树状数组+权值线段树)

    传送门 数据结构优化计数菜题. 题意简述:给nnn个点问有多少个www型. www型的定义: 由5个不同的点组成,满足x1<x2<x3<x4<x5,x3>x1>x2 ...

  8. 2019.01.14 bzoj5343: [Ctsc2018]混合果汁(整体二分+权值线段树)

    传送门 整体二分好题. 题意简述:nnn种果汁,每种有三个属性:美味度,单位体积价格,购买体积上限. 现在有mmm个询问,每次问能否混合出总体积大于某个值,总价格小于某个值的果汁,如果能,求所有方案中 ...

  9. jzoj5986. 【WC2019模拟2019.1.4】立体几何题 (权值线段树)

    传送门 题面 题解 不难看出每个点的大小为行列限制中较小的那一个(因为数据保证有解) 对于行的每个限制,能取到的个数是列里限制大于等于它的数的个数,同理,对于列是行里大于它的个数(这里没有等于,为了避 ...

随机推荐

  1. 修改Ubuntu16.04默认主题标题栏的颜色

    默认主题为Ambiance: sudo gedit /usr/share/themes/Ambiance/gtk-3.0/gtk-main.css 将: @define-color dark_bg_c ...

  2. Dart编程循环

    有时,某些指令需要重复执行.循环是一种理想的方法.循环表示必须重复的一组指令.在循环的上下文中,重复被称为迭代 . 下图说明了循环的分类 让我们开始讨论确定循环.迭代次数是确定/固定的循环称为确定循环 ...

  3. Quick BI 支持多种数据源进行多维分析

    一.摘要 随着互联网的高速发展,数据量爆发式增长的同时,数据的存储形式也开始呈现出多样性,有结构化存储,如 Mysql, Oracle, SQLServer 等,半结构化甚至非结构化存储,如HBase ...

  4. thinkphp session驱动

    默认的session驱动的命名空间是Think\Session\Driver,并实现下面的驱动接口:大理石构件哪家好 方法说明 接口方法 打开Session open($savePath, $sess ...

  5. thinkphp 模型调试

    调试执行的SQL语句 在模型操作中 ,为了更好的查明错误,经常需要查看下最近使用的SQL语句,我们可以用getLastsql方法来输出上次执行的sql语句.例如: $User = M("Us ...

  6. Python self的用法

    1)不加self是局部变量,只在这个方法里有效:加self则是实例变量,相当于别的函数定义的变量你实例化出来就可以使用 #coding:utf-8 class Person: def __init__ ...

  7. spring注解方式配置以及spring4的泛型注入 (4)

    目录 一.@Controller 注解控制层(action) 二.@Service 注解服务层 三.@Repository 持久层 四.spring4的泛型注入测试 1 创建两个实体User和Role ...

  8. Vue.js框架的基础指令

    Vue.js 渐进式 javascript 框架,可以独立完成前后端分离式web项目的javascript框架 js是页面脚本语言,用来控制或是辅助页面搭建,vue是js功能的集合体. 三大主流前端框 ...

  9. 3.2_springBoot2.1.x检索之JestClient操作ElasticSearch

    这里介绍Jest方式交互, 导入jest版本 <!--导入jest--> <dependency> <groupId>io.searchbox</groupI ...

  10. [JSOI2019]精准预测

    题目 这么明显的限制条件显然是\(\text{2-sat}\) 考虑按照时间拆点,\((0/1,x,t)\)表示\(x\)个人在时间\(t\)是生/死 有一些显然的连边 \[(0,x,t+1)-> ...