2019CCPC网络赛 1002 HDU 6703(权值线段树)

思路:用权值线段树存题目给的数据后,2操作就是求权值线段树中大于等于k的部分中,靠近左端点的第一个大于r的值(这个求出来的只是原序列中顺序)在原序列中对应的值,1操作就是对应值变成inf(即一定大于k),特判k>n,输出k+1,若未找到,则输出n+1。

#include<bits/stdc++.h>
#define rep(i,a,b)  for(int i=a;i<=b;i++)
#define mid (l+r)/2
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
const ll inf=1e10;
ll dat[4*maxn],num[maxn],b[maxn],id[4*maxn];
void build(int a,int l,int r){if(l==r)    dat[a]=num[l];else{build(a<<1,l,mid);build(a<<1|1,mid+1,r);dat[a]=max(dat[a<<1],dat[a<<1|1]);}
}
void update(int a,int l,int r,int p){if(l==r){dat[a]=inf;return;}if(p<=mid)  update(a<<1,l,mid,p);else     update(a<<1|1,mid+1,r,p);dat[a]=max(dat[a<<1],dat[a<<1|1]);
}
int query(int a,int l,int r,int s,int t,int k){if(l==r){if(dat[a]>k)   return  b[id[a]];else   return -1;}int k1=-1,k2=-1;if(s<=mid && dat[a<<1]>k) k1=query(a<<1,l,mid,s,t,k);if(k1!=-1)   return k1;if(t>mid  && dat[a<<1|1]>k)   k2=query(a<<1|1,mid+1,r,s,t,k);return k2;
}
int main(){int T;scanf("%d",&T);while(T--){memset(dat,0,sizeof(dat));int n,m,ans=0;scanf("%d%d",&n,&m);rep(i,1,n)  scanf("%lld",&b[i]),num[b[i]]=i;build(1,1,n);memcpy(id,dat,sizeof(dat));rep(i,1,m){int t,l,r;scanf("%d%d",&t,&l);l^=ans;if(t==1){//cout<<l<<endl; update(1,1,n,b[l]);}else{scanf("%d",&r);r^=ans;if(r>n){printf("%d",r+1);continue;}ans=query(1,1,n,r,n,l);if(ans==-1)  ans=n+1;printf("%d\n",ans);}}}
}

2019CCPC网络赛 1002 HDU 6703(权值线段树)相关推荐

  1. 权值线段树小结(hdu多校,普通平衡树,郁闷的出纳员)

    之前刷了一点主席树的题目,但是没有系统的做过权值线段树的题目.主席树是多根权值线段树的综合.权值线段树可以解决在总区间里求第k大的问题.在普通的线段树里,我们每一个节点维护的是权值大小.但是在权值线段 ...

  2. Minimum Inversion Number HDU - 1394(权值线段树/树状数组)

    The inversion number of a given number sequence a1, a2, -, an is the number of pairs (ai, aj) that s ...

  3. 【HDU - 5489】Removed Interval(离散化,权值线段树,思维,最长上升子序列)

    题干: Given a sequence of numbers A=a1,a2,-,aNA=a1,a2,-,aN, a subsequence b1,b2,-,bkb1,b2,-,bk of AA i ...

  4. 【bzoj2770】YY的Treap 权值线段树

    题目描述 志向远大的YY小朋友在学完快速排序之后决定学习平衡树,左思右想再加上SY的教唆,YY决定学习Treap.友爱教教父SY如砍瓜切菜般教会了YY小朋友Treap(一种平衡树,通过对每个节点随机分 ...

  5. 树套树 ----- P1975 [国家集训队]排队(树状数组套权值线段树求动态逆序对)

    解题思路: 首先我们知道交换两个数a[l]和a[r]a[l]和a[r]a[l]和a[r]影响到的区间是[l+1,r−1][l+1,r-1][l+1,r−1] 对于a[l]a[l]a[l],我们要减去[ ...

  6. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大

    题目链接 题目大意: 给你一个数组aaa,aaa有两个操作 询问aaa中[l,r][l,r][l,r]区间里面第kkk小的数是哪个? 修改axa_xax​为yyy 解题思路: 首先我们知道权值线段树是 ...

  7. codevs1688 求逆序对(权值线段树)

    1688 求逆序对  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 给定一个序列a1,a2,-,an,如 ...

  8. 【HDU6701】Make Rounddog Happy【权值线段树+双向单调队列】

    题意:给你一个序列,求满足要求的子序列个数,其中要求为: 1.子序列的max-子序列长度len<=k 2.子序列中不出现重复的数字 题解:首先看到子序列max,很容易想到枚举最大值然后分治,这个 ...

  9. HDU-5249 KPI(STL or 权值线段树)

    题目链接 Problem Description 你工作以后, KPI 就是你的全部了. 我开发了一个服务,取得了很大的知名度.数十亿的请求被推到一个大管道后同时服务从管头拉取请求.让我们来定义每个请 ...

最新文章

  1. Exchange2007 中Send as 与Send on behalf of 讲解
  2. python的闭包及装饰器
  3. 径向基函数插值(3)二维数据的插值
  4. linux下使用extundelete恢复ext3/ext4分区数据
  5. Linux学习:shell命令(文件和目录相关)
  6. ARM产品二十年路线图
  7. php $that,PHP中$this和$that指针使用实例
  8. PMP第五版第一次考试相关提醒
  9. 问答| 为什么car-like robot运动中存在最小转弯半径?
  10. samba服务器的设置
  11. 远程计算机用户名win7,Win7远程桌面连接设置的方法
  12. redis,ruby安装
  13. 基础篇:6.6)形位公差-基准 Datum
  14. python实现火车票查询工具_用 Python 写一个命令行火车票查看器
  15. 框架尺寸调整属性NORESIZE
  16. html rfftq15.gif,STM32F4系列完整固件库
  17. 定期360评估系统优于年度绩效考核
  18. Android组件化开发实践和案例分享 | 融合数10个项目模块
  19. MBA提前面试:商学院看重软实力
  20. 鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机

热门文章

  1. 计算机网络——网络练习题 1
  2. 详解Spring循环依赖
  3. php中文网线上视频,看php中文网视频课程的正确姿势!
  4. 【How to Read a Paper Efficiently】如何高效阅读论文
  5. 分享几个开源的android项目的源码,基本上用androidstudio都可以编译成功
  6. 服务器端Server-U忘记密码的解决办法
  7. Python时区变换
  8. mysql executebatch_Mysql批量插入executeBatch测试
  9. error: stray ‘\302’ in program/error: stray ‘\240’ in program解决方法
  10. 性能测试-最大并发数估算