Codeforces Round #220 (Div. 2) D:http://codeforces.com/contest/374/problem/D

题意:给你m个数,这m个数是递增的。然后给你n个操作,每个操作是一个数1,0,-1,如果是1或者0,就把这个数数直接放在序列的末位,刚开始的时候,序列为空。当操作数是-1的时候,只要把ai<=当期序列长度,就把ai所对应的那一位删除。

题解:用树状数组和二分搞。首先如果是0或者1,直接把这个数放进去,把这个数的位子加一。然后更新的时候,首先查询到小于等于序列长度的那些数,表示要删除在该序列的第几个数,然后用二分找到这个数,但是这里不能直接删除,要先保存,然后等所有的数都找完了,再进行统一删除。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+;
int c[N],a[N],ans[N],top,as[N];
int n,m,sum;
void init(){
memset(c,,sizeof(c));
memset(a,,sizeof(a));
memset(ans,-,sizeof(ans));
top=;
}
int lowbit(int x){
return x&(-x); }
void add(int x,int val){
while(x<=m){
c[x]+=val;
x+=lowbit(x);
}
} int getsum(int x){
int ans=;
while(x){
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
void work(int num,int ct){
int l=,r=m;
while(l<r){
int mid=(l+r)/;
//printf("%d\n",mid);
if(getsum(mid)>=num)r=mid;
else
l=mid+;
}
as[ct]=l;
}
int t;
int main(){
while(~scanf("%d%d",&m,&n)){
init();
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=;i<=m;i++){
scanf("%d",&t);
if(t==||t==){
ans[++top]=t;
sum++;
add(top,);
}
else{
int temp=lower_bound(a+,a+n+,sum)-a;
if(temp>n)temp--;
else if(a[temp]>sum)temp--;
sum-=temp;
// printf("%d\n",temp);
for(int i=;i<=temp;i++)
work(a[i],i);
for(int i=;i<=temp;i++){
add(as[i],-);
ans[as[i]]=-;
}
} }
bool flag=false;
for(int i=;i<=m;i++){
if(ans[i]==-)continue;
printf("%d",ans[i]);
flag=true;
}
if(!flag)printf("Poor stack!");
puts(""); }
}

Inna and Sequence的更多相关文章

  1. Codeforces Round #220 (Div. 2) D - Inna and Sequence

    D - Inna and Sequence 线段数维护区间有几个没有被删除的数,利用线段树的二分找第几个数在哪里,然后模拟更新就好啦. #include<bits/stdc++.h> #d ...

  2. Codeforces 374D - Inna and Sequence

    374D - Inna and Sequence 思路: 树状数组+二分 因为被删的点最多N=1e6个,所以复杂度N*logN*logN 前段时间做过一道一样的题,这类题基本套路二分找没删除前的位置 ...

  3. Codefroces 374 B Inna and Sequence (树状数组 || 线段树)

    Inna and Sequence 题意:先给你一个n,一个m, 然后接下来输入m个数,表示每次拳击会掉出数的位置,然后输入n个数,每次输入1或0在数列的末尾加上1或0,如果输入-1,相应m序列的数的 ...

  4. codeforces 374D. Inna and Sequence 线段树

    题目链接 给m个数, n个操作, 一个数列, 初始为空.一共有3种操作, 在数列末尾加0, 加1, 或删除位置为a[i]的数, a[i]为初始给的m个数, 如果a[i]大于数列长度, 那么什么也不发生 ...

  5. Codeforces 374D Inna and Sequence 二分法+树状数组

    主题链接:点击打开链接 特定n一个操作,m长序列a 下列n的数量 if(co>=0)向字符串加入一个co (開始是空字符串) else 删除字符串中有a的下标的字符 直接在序列上搞.简单模拟 # ...

  6. 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)

    原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解    By 岩之痕 目录: 一:综述 ...

  7. Codeforces Round #229 (Div. 2) C. Inna and Candy Boxes 树状数组s

    C. Inna and Candy Boxes   Inna loves sweets very much. She has n closed present boxes lines up in a ...

  8. oracle SEQUENCE 创建, 修改,删除

    oracle创建序列化: CREATE SEQUENCE seq_itv_collection            INCREMENT BY 1  -- 每次加几个              STA ...

  9. Oracle数据库自动备份SQL文本:Procedure存储过程,View视图,Function函数,Trigger触发器,Sequence序列号等

    功能:备份存储过程,视图,函数触发器,Sequence序列号等准备工作:--1.创建文件夹 :'E:/OracleBackUp/ProcBack';--文本存放的路径--2.执行:create or ...

随机推荐

  1. BAE、SAE 与 GAE 对比

    从数据库.应用配置.计费.域名绑定.平台服务对比了 BAE.SAE 以及 GAE 的优劣,最后给出云平台选型的建议. 数据库SAE 不支持 InnoDB(可申请支持),BAE 默认支持. BAE 不支 ...

  2. 对vpn的认识

    网上关于vpn的资料非常多,看后眼花缭乱,仍然感觉一片混沌.网上,网下參考一些资料后.试着理清一些概念问题,由于,概念理清了,找到门了,才不至于左右徘徊,一片混沌. 首先vpn,这个我们都知道叫虚拟专 ...

  3. MST最小生成树及Prim普鲁姆算法

    MST在前面学习了Kruskal算法,还有一种算法叫做Prim的.这两者的区别是Prim算法适合稠密图,比如说鸟巢这种几乎所有点都有相连的图.其时间复杂度为O(n^2),其时间复杂度与边的数目无关:而 ...

  4. eclipse 常见问题及解决

    1. Target runtime Apache Tomcat v6.0 is not defined.错误解决方法 原文:http://blog.csdn.net/xw13106209/articl ...

  5. 十个最好的Java性能故障排除工具

    1.jconsole  是随着JDK 1.5而推出的.这是一个Java监测和管理控制台-JMX兼容的图形工具来监测Java虚拟机.它能够同时监测本地和远程的JVMs.详情可查看:jconsole工具介 ...

  6. JAVA 生成PDF报表()

    许多应用程序都要求动态生成 PDF 文档.这些应用程序涵盖从生成客户对帐单并通过电子邮件交付的银行到购买特定的图书章节并以 PDF 格式接收这些图书章节的读者.这个列表不胜枚举.在本文中,我们将使用 ...

  7. 【深度解析】Google第二代深度学习引擎TensorFlow开源

    作者:王嘉俊 王婉婷 TensorFlow 是 Google 第二代深度学习系统,今天宣布完全开源.TensorFlow 是一种编写机器学习算法的界面,也可以编译执行机器学习算法的代码.使用 Tens ...

  8. SGU 199 Beautiful People(DP+二分)

    时间限制:0.25s 空间限制:4M 题意: 有n个人,每个人有两个能力值,只有一个人的两个能力都小于另一个的能力值,这两个人才能共存,求能同时共存的最大人数. Solution: 显然这是一个两个关 ...

  9. 【POJ3243】【拓展BSGS】Clever Y

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

  10. 《zip命令》-linux命令五分钟系列之九

    本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...