ccpc网赛 hdu6703 array(权值线段树
http://acm.hdu.edu.cn/showproblem.php?pid=6703
大意:给一个n个元素的数组,其中所有元素都是不重复的[1,n]。
两种操作:
将pos位置元素+1e7
查询不属于[1,r]中的最小的>=k的值
思路:将数组元素排序,根据其下标建立权值线段树,维护下标的最大值。
修改将对应值在线段树中的下标直接改为inf32。
查询时,查[k,n+1]区间内找到第一个下标>r的位置。
#include<bits/stdc++.h>
#define ll long long
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define clean(a,b) memset(a,b,sizeof(a))
using namespace std;
const int MAXN=1e5+10;
const int INF32=0x3f3f3f3f;
const ll INF64=0x3f3f3f3f3f3f3f3f;
const ll MOD=1e9+7;
const double PI=acos(-1.0);
const double EPS=1.0e-8; struct segTree{
struct node{
int l,r,len,id,mx;
}tree[MAXN<<2];
void pushup(int rt){
tree[rt].mx = max(tree[rt<<1].mx,tree[rt<<1|1].mx);
}
void build(int l,int r,int rt,int A[]){
tree[rt].l=l;tree[rt].r=r;tree[rt].len=r-l+1;
if(l==r){
tree[rt].id = tree[rt].mx = A[l];
return;
}
int mid = (l+r)>>1;
build(l,mid,rt<<1,A);
build(mid+1,r,rt<<1|1,A);
pushup(rt);
}
void update(int pos,int val,int rt){
if(tree[rt].l==tree[rt].r){
tree[rt].id = tree[rt].mx = val;
return;
}
if(pos<=tree[rt<<1].r) update(pos,val,rt<<1);
else update(pos,val,rt<<1|1);
pushup(rt);
}
int query(int ql,int qr,int val,int rt){
if(tree[rt].l==tree[rt].r) return tree[rt].l;
int ans = INF32;
if(ql<=tree[rt<<1].r&&val<tree[rt<<1].mx) ans=query(ql,qr,val,rt<<1);
if(ans!=INF32) return ans;
if(qr>=tree[rt<<1|1].l&&val<tree[rt<<1|1].mx) ans=query(ql,qr,val,rt<<1|1);
return ans;
}
};
segTree seg;
PII A[MAXN];
int B[MAXN];
int n,m; int cmp1(PII a,PII b){
return a.second<b.second;
} int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>A[i].first;
A[i].second = i;
}
sort(A+1,A+1+n);
for(int i=1;i<=n;i++){
B[i] = A[i].second;
}
sort(A+1,A+1+n,cmp1);
B[++n] = INF32;
seg.build(1,n,1,B);
int ans = 0;
while(m--){
int opt;
cin>>opt;
if(opt==1){
int t1,pos;
cin>>t1;
pos = t1^ans;
seg.update(A[pos].first,INF32,1);
}
else {
int t2,t3,r,k;
cin>>t2>>t3;
r = t2^ans;
k = t3^ans;
cout<<(ans=seg.query(k,n,r,1))<<endl;
}
}
}
return 0;
}
ccpc网赛 hdu6703 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的值.强制在线. 题解因为数组中的值唯一 ...
- 对权值线段树剪枝的误解--以HDU6703为例
引子 对hdu6703,首先将问题转化为"询问一个排列中大于等于k的值里,下标超过r的最小权值是多少" 我们采用官方题解中的做法:权值线段树+剪枝 对(a[i],i)建线段树,查询 ...
- 2019牛客训练赛第七场 C Governing sand 权值线段树+贪心
Governing sand 题意 森林里有m种树木,每种树木有一定高度,并且砍掉他要消耗一定的代价,问消耗最少多少代价可以使得森林中最高的树木大于所有树的一半 分析 复杂度分析:n 1e5种树木,并 ...
- HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU 6464 权值线段树 && HDU 6468 思维题
免费送气球 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- D. Restore Permutation(权值线段树)
D. Restore Permutation time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- 2019牛客多校第七场E Find the median 权值线段树+离散化
Find the median 题目链接: https://ac.nowcoder.com/acm/contest/887/E 题目描述 Let median of some array be the ...
随机推荐
- Shell基本语法---常见的条件判断
语法 [ 判断表达式 ] 文件夹或路径是否存在 -e 目标是否存在(exist) -d 是否为路径(directory) -f 是否为文件(file) [ -e text.sh ] || touch ...
- 虚IP解决程序连只读服务器故障漂移
目前公司有一套核心交易数据库配置了AlWaysON,SQL 2012版本, 1主4从, 其从库(8,14, 8.15) 这2台只读的从数据库服务器, 后台程序和wms等很多程序,都是直接配置IP连接这 ...
- 【JDK】JDK源码分析-Vector
概述 上文「JDK源码分析-ArrayList」主要分析了 ArrayList 的实现原理.本文分析 List 接口的另一个实现类:Vector. Vector 的内部实现与 ArrayList 类似 ...
- 常用GDB命令行调试命令
po po是print-object的简写,可用来打印所有NSObject对象.使用举例如下: (gdb) po self <LauncherViewController: 0x552c570& ...
- 一个项目的SpringCloud微服务改造过程
SSO是公司一个已经存在了若干年的项目,后端采用SpringMVC.MyBatis,数据库使用MySQL,前端展示使用Freemark.今年,我们对该项目进行了一次革命性的改进,改造成SpringCl ...
- Java Web基础面试题整理
Tomcat的缺省端口是多少,怎么修改 tomcat默认缺省端口是8080 修改方法: 找到Tomcat目录下的conf文件夹 进入conf文件夹里面找到server.xml文件 打开server.x ...
- Liunx查看后1000行的命令以及查看中间部分
linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...
- java集合类的相关转换
下面的的案例,基本上是以代码为主,文字的描述较少,后期有时间会继续添加. ArrayToList public void ArrayToList() { System.out.println(&quo ...
- JS闪电打字特效
HTML <div class="page page-thunder-to-text"> <input id="input" type=&qu ...
- SQL Server 数据完整性的实现——约束
SQL Server数据库采用的是关系数据模型,而关系数据模型本身的优点之一就是模型本身集成了数据完整性.作为模型一部分而实施的数据完整性(例如在创建数据表时的列属性定义)称作为声明式(Declara ...