博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树——HYSBZ - 3224
阅读量:4570 次
发布时间:2019-06-08

本文共 2329 字,大约阅读时间需要 7 分钟。

题目含义

题目都给出来了,要你写个线段树

题目分析

只要学会了模板,这种题就很简单了

题目代码

注:不管怎样,首先要试着默写出来通过一次

#include
#include
#include
#include
using namespace std;typedef long long LL;const int maxn=1e6+7;int a[maxn],b[maxn],la[maxn],mp[maxn];int n,sum[maxn<<2];struct node{ int c,x;}ope[maxn];void add(int l,int r,int rt,int x,int k){ sum[rt]+=k; if(l==r)return; int mid=(l+r)>>1; if(x>mid)add(mid+1,r,rt<<1|1,x,k); if(x<=mid)add(l,mid,rt<<1,x,k);}int xrank(int l,int r,int rt,int ll,int rr){ if(ll<=l&&r<=rr)return sum[rt]; int mid=(l+r)>>1; int ans=0; if(ll<=mid)ans+=xrank(l,mid,rt<<1,ll,rr); if(rr>mid)ans+=xrank(mid+1,r,rt<<1|1,ll,rr); return ans;}int Kith(int l,int r,int rt,int x){ if(l==r)return l; int mid=(l+r)>>1; if(x<=sum[rt<<1])return Kith(l,mid,rt<<1,x); else return Kith(mid+1,r,rt<<1|1,x-sum[rt<<1]);}int Findpre(int l,int r,int rt){ if(l==r)return l; int mid=(l+r)>>1; if(sum[rt<<1|1])return Findpre(mid+1,r,rt<<1|1); else return Findpre(l,mid,rt<<1);}int Pre(int l,int r,int rt,int v){ if(v>r){ if(sum[rt])return Findpre(l,r,rt); else return 0; } int mid=(l+r)>>1,Re; if(v>mid+1&&sum[rt<<1|1]&&(Re=Pre(mid+1,r,rt<<1|1,v))) return Re; else return Pre(l,mid,rt<<1,v);}int Findnext(int l,int r,int rt){ if(l==r)return l; int mid=(l+r)>>1; if(sum[rt<<1])return Findnext(l,mid,rt<<1); else return Findnext(mid+1,r,rt<<1|1);}int Next(int l,int r,int rt,int v){ if(v
>1,Ne; if(v<=mid-1&&sum[rt<<1]&&(Ne=Next(l,mid,rt<<1,v))) return Ne; else return Next(mid+1,r,rt<<1|1,v);}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d",&ope[i].c,&ope[i].x); a[i]=b[i]=ope[i].x; } sort(b+1,b+1+n); for(int i=1;i<=n;i++){ la[i]=lower_bound(b+1,b+1+n,a[i])-b; mp[la[i]]=a[i]; } for(int i=1;i<=n;i++){ int c=ope[i].c,x=la[i]; if(c==1)add(1,n,1,x,1); if(c==2)add(1,n,1,x,-1); if(c==3)printf("%d\n",xrank(1,n,1,1,x-1)+1); if(c==4)x=ope[i].x,printf("%d\n",mp[Kith(1,n,1,x)]); if(c==5)printf("%d\n",mp[Pre(1,n,1,x)]); if(c==6)printf("%d\n",mp[Next(1,n,1,x)]); } return 0;}

 

转载于:https://www.cnblogs.com/helman/p/11228259.html

你可能感兴趣的文章
LayoutInflater和inflate()方法的使用方法
查看>>
TsFltMgr.sys系统蓝屏的原因就在于QQ电脑管家!
查看>>
Luogu P4306 JSOI2010 连通数
查看>>
爬取音悦台MV信息(requests,BeautifulSoup,xlwt)----待完善
查看>>
asp.net gridview 控件如何根据一列内容显示另一列的内容
查看>>
应用开发之Linq和EF
查看>>
EF架构~终于自己架构了一个相对完整的EF方案
查看>>
js-位置问题
查看>>
c语言实践 给三个数输出最大的那个数
查看>>
线性表
查看>>
jar包冲突解决方法
查看>>
Jason 和 Java 对象转化示例
查看>>
笔记_第一章_01
查看>>
github开发
查看>>
Codeforces Round #564(div2)
查看>>
python协程
查看>>
IaaS基础设施资源管理架构与openstack各组件对应关系
查看>>
PHP SplObjectStorage使用实例
查看>>
使用sencha cmd打包extjs4.2.2
查看>>
Python之路—Day2作业
查看>>