题意:

给你n个数,然后给你q个询问,有两种询问:

a: 表示在右边插入一个数

c:表示从左边拿出一个数,然后输出;

思路:

一开始在想,自己手上的黑科技:线段树和树状数组

线段树上的操作:

求区间最大,没说区间第几个啊;

树状数组:

搞一发前缀和,妈个鸡,树状数组还需要知道下标和位置;

还有什么:

数组,感觉黑科技没什么了;

然后。。。

线段树维护区间有多少个数,好像很对啊,初始化建树就是n+q长度的区间,然后每次插入就是第n+i个,每次插入,删除都是log级别的;

后来线段树打完居然没什么错,感动啊;

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2e5+10; struct SegT{
bool flag;
int left,right;
int num,v;
};
SegT q[N*4];
int n,Q; void Build(int num,int L,int R)
{
q[num].left=L;
q[num].right=R;
if(L==R)
{
if(L<=n)
{
scanf("%d",&q[num].v);
q[num].flag=true;
q[num].num=1;
return;
}
else
{
q[num].flag=false;
q[num].num=0;
return;
}
}
int mid=(L+R)/2;
Build(2*num, L,mid);
Build(2*num+1,mid+1,R);
q[num].num=q[2*num].num+q[2*num+1].num;
} void add(int num,int id,int x)
{
if(q[num].left==id&&q[num].left==q[num].right)
{
q[num].flag=true;
q[num].v=x;
q[num].num=1;
return;
}
int mid=(q[num].left+q[num].right)/2;
if(mid>=id)
add(2*num,id,x);
else
add(2*num+1,id,x);
q[num].num=q[2*num].num+q[num*2+1].num;
} int DEL(int num,int id)
{
if(q[num].left==q[num].right)
{
q[num].num=0;
q[num].flag=false;
return q[num].v;
}
int ans=0;
if(q[2*num].num>=id)
ans=DEL(2*num,id);
else
ans=DEL(2*num+1,id-q[2*num].num);
q[num].num=q[2*num].num+q[2*num+1].num;
return ans;
} int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
char txp[5];
int temp;
scanf("%d%d",&n,&Q);
Build(1,1,n+Q);
printf("Case %d:\n",cas++);
for(int i=1;i<=Q;i++)
{
scanf("%s%d",txp,&temp);
if(txp[0]=='a')
add(1,n+i,temp);
else
{
if(q[1].num<temp)
puts("none");
else
printf("%d\n",DEL(1,temp));
}
}
}
return 0;
}

lightoj1087 【线段树】的更多相关文章

  1. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  2. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  3. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  4. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  5. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  6. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  7. CF719E(线段树+矩阵快速幂)

    题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

随机推荐

  1. linux socket详解

    1 linux socket编程的固定模式 server端,bind.listen.accept client端,connect client端和server端之间的一次通信: client端,wri ...

  2. r testifying that your code will behave as you intend.

    https://github.com/stretchr/testify Testify - Thou Shalt Write Tests    Go code (golang) set of pack ...

  3. UniGui的信息弹出框MessageDlg自定义标题的方法(使用JS动态本地化文本)

    UniGui的信息弹出框MessageDlg的原型定义如下: procedure MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons ...

  4. 设置VIM查找时不区分大小写

    :set ic 永久生效 vi ~/.vimrc set ic

  5. git推送已有项目到gitee

    有时候会接收一个项目,这个项目已有git版本控制,但git 远端服务器地址已失效(员工离职,原先是推送到他个人gitee上的). 要按照如下步骤,将该项目推送到gitee. 1.先去gitee上新建一 ...

  6.  (转)windows一台电脑添加多个git账号

    版权声明:技术总结来自互联网,书籍,以及工作积累.如果觉得我的总结有帮助,欢迎分享. https://blog.csdn.net/qq1332479771/article/details/701496 ...

  7. Protocol_OSPF

    Protocol_OSPF 作者:Danbo 2015-7-4 从一个非常概括的角度来看OSPF协议的操作是比较容易理解的 1.宣告OSPF的路由器从所有启动OSPF协议的接口上发出Hello数据包. ...

  8. CSU - 1529 Equator —— DP 最大连续和子序列

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1529 题解: 一个加强版的最大连续和子序列,序列可以从末尾元素转到首元素. 分两种情 ...

  9. 关于redis的思考

    集群版本的redis主从复制 也可以实现集群 但是不是很好 集群版redis主从复制版本集群 Spring Boot整合Redi事务 Spring Boot+Redis+Ehcache实现二级缓存 S ...

  10. 清理html中空白符/空格/换行在行内元素中产生的间距

    问题:行内元素之间产生间隔 原因:换行符,Tab制表符,空格产生间隔 解决方法: 1.行内元素写成一行 2.设置font-size为0px 把父级文本设置为0px; 再为需要显示文字的行内元素设置文字 ...