Inna and Sequence
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的更多相关文章
- Codeforces Round #220 (Div. 2) D - Inna and Sequence
D - Inna and Sequence 线段数维护区间有几个没有被删除的数,利用线段树的二分找第几个数在哪里,然后模拟更新就好啦. #include<bits/stdc++.h> #d ...
- Codeforces 374D - Inna and Sequence
374D - Inna and Sequence 思路: 树状数组+二分 因为被删的点最多N=1e6个,所以复杂度N*logN*logN 前段时间做过一道一样的题,这类题基本套路二分找没删除前的位置 ...
- Codefroces 374 B Inna and Sequence (树状数组 || 线段树)
Inna and Sequence 题意:先给你一个n,一个m, 然后接下来输入m个数,表示每次拳击会掉出数的位置,然后输入n个数,每次输入1或0在数列的末尾加上1或0,如果输入-1,相应m序列的数的 ...
- codeforces 374D. Inna and Sequence 线段树
题目链接 给m个数, n个操作, 一个数列, 初始为空.一共有3种操作, 在数列末尾加0, 加1, 或删除位置为a[i]的数, a[i]为初始给的m个数, 如果a[i]大于数列长度, 那么什么也不发生 ...
- Codeforces 374D Inna and Sequence 二分法+树状数组
主题链接:点击打开链接 特定n一个操作,m长序列a 下列n的数量 if(co>=0)向字符串加入一个co (開始是空字符串) else 删除字符串中有a的下标的字符 直接在序列上搞.简单模拟 # ...
- 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)
原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解 By 岩之痕 目录: 一:综述 ...
- 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 ...
- oracle SEQUENCE 创建, 修改,删除
oracle创建序列化: CREATE SEQUENCE seq_itv_collection INCREMENT BY 1 -- 每次加几个 STA ...
- Oracle数据库自动备份SQL文本:Procedure存储过程,View视图,Function函数,Trigger触发器,Sequence序列号等
功能:备份存储过程,视图,函数触发器,Sequence序列号等准备工作:--1.创建文件夹 :'E:/OracleBackUp/ProcBack';--文本存放的路径--2.执行:create or ...
随机推荐
- 海思android4.4 SDK编译Latin输入法
原来的HiSTBAndroidV500R001C01SPC020\device\hisilicon\bigfish\packages\apps\HiLatinIME\Android.mk内容例如以下: ...
- 微软ASP.NET网站部署指南(10):迁移至SQL Server
1. 综述 第2章的部署SQL Server Compact和第9章的部署数据库更新里解释了为什么终于要升级到完整版SQL Server .本章节将告诉你怎样来做. SQL Server Expre ...
- UVa 993: Product of digits
这道题很简单.先将N用2,3,5,7(即10以内的素数)分解因数(需要先特殊判断N不为1),然后将可以合并的因数合并(如2*2合并成4,)这样求得的结果位数会减少,大小肯定会小一些.具体实现见代码. ...
- 转换字符串格式,可用于sql in
/// <summary> /// 转换字符串格式,可用于sql in /// </summary> /// <param name="lst"> ...
- oracle约束条件状态
Oracle完整性约束有一下4种: • DISABLE NOVALIDATE • ENABLE NOVALIDATE • DISABLE VALIDATE • ENABLE VALIDATE • ...
- wsdlLocation可以写成项目的相对路劲吗
如果客户端的代码使用wsdl生成的话,这个地址是从wsdl描述的<service>里的<location>获取的,如果开发过程中服务地址换了,那只能手工来修改了,好像只有一个地 ...
- 原生js实现回到顶部
网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...
- meta标签常用属性整理
在segmentfault看到这篇文章,觉得整理的很详细,所以转载过来和大家分享一下. 原文地址:http://segmentfault.com/blog/ciaocc/119000000240791 ...
- 分页插件jquery.simplePagination.js使用
利用ecshop后台,利用插件更改分页显示样式遇到的问题,由于是利用Ajax获取数据进行页面数据更新?所以出现了以下情况: 初始化页面前 : 分页更新后: 点击后出现了分页插件内容消失, 原因:分页一 ...
- php基础知识【函数】(9)数学和对象类函数
一.数学 abs -- 绝对值 ceil -- 进一法取整 floor -- 舍去法取整 fmod -- 返回除法的浮点数余数 round -- 对浮点数进行四舍五入 sqrt -- 平方根 pi( ...