lightoj1087 【线段树】
题意:
给你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 【线段树】的更多相关文章
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
随机推荐
- Spring Data MongoDB 四:基本文档改动(update)(一)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 二:MongoDB加入.删除.改动 一.简单介绍 Spring Data Mo ...
- 一个兼容性比较好的图片左右滚动的js
下载地址:http://www.cnblogs.com/RightDear/admin/Files.aspx 文件:shhds.rar
- 九度OJ 1104:整除问题 (整除、因式分解)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4142 解决:1346 题目描述: 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除. 输入: 两个整数n(2< ...
- 最简单的Windows程序
准备研究一下vmp 保护,从一个最简单的Windows程序入手似乎是个不错的想法. 如何才最简单呢,仅仅有一个MessageBox 调用好了. 弹出消息.退出,哦也,够简单吧. 祭出法器VC2010. ...
- 【LeetCode】Insertion Sort List
Sort a linked list using insertion sort. //用到O(N)的额外空间 public class Solution { public ListNode inser ...
- PAT 天梯赛 L1-054. 福到了 【字符串】
题目链接 https://www.patest.cn/contests/gplt/L1-054 思路 可以先将字符串用字符串数组 输入 然后用另一个字符串数组 从 n - 1 -> 0 保存 其 ...
- 查看ubuntu磁盘空间占用及占用空间大的文件
最近老是收到 ecs上有台服务器的磁盘利用率高 终于有一天 ssh登不上去了 http://blog.csdn.net/aaashen/article/details/50685988 清除相关大文件 ...
- 关于“C++语言程序设计”书的一个类
class book{ char* title; int num_pages; int cur_page;public: book(const char* theTitle, ...
- Vue.js style(内联样式)
Vue.js style(内联样式) 我们可以在 v-bind:style 直接设置样式: <div id="app"> <div v-bind:style=&q ...
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源方法
一.开篇 这里整合分别采用了Hibernate和MyBatis两大持久层框架,Hibernate主要完成增删改功能和一些单一的对象查询功能,MyBatis主要负责查询功能.所以在出来数据库方言的时候基 ...