374D - Inna and Sequence

思路:

树状数组+二分

因为被删的点最多N=1e6个,所以复杂度N*logN*logN

前段时间做过一道一样的题,这类题基本套路二分找没删除前的位置

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a)) const int N=1e6+;
int n;
int bit[N];
int a[N];
int ans[N];
bool vis[N];
vector<int>v;
void add(int x,int a){
while(x<=1e6)bit[x]+=a,x+=x&-x;
}
int sum(int x){
int ans=;
while(x)ans+=bit[x],x-=x&-x;
return ans;
}
int srch(int t){
int l=,r=1e6,mid=(l+r)>>;
while(l<r){
if(sum(mid)>=t)r=mid;
else l=mid+;
mid=(l+r)>>;
}
return mid;
}
int main(){
ios::sync_with_stdio(false);
cin.tie();
for(int i=;i<=1e6;i++)add(i,);
int cnt=,t,m;
cin>>n>>m;
for(int i=;i<m;i++)cin>>a[i];
for(int i=;i<n;i++){
cin>>t;
if(t==-){
v.clear();
for(int j=;j<m;j++){
int l=srch(a[j]);
if(l>cnt)break;
v.pb(l);
}
for(int j=;j<v.size();j++){
vis[v[j]]=true;
add(v[j],-);
}
}
else{
ans[++cnt]=t;
}
}
if(sum(cnt)==)cout<<"Poor stack!"<<endl;
else{
for(int i=;i<=cnt;i++)if(!vis[i])cout<<ans[i];
cout<<endl;
}
return ;
}

Codeforces 374D - Inna and Sequence的更多相关文章

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

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

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

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

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

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

  4. Codeforces 486E LIS of Sequence(线段树+LIS)

    题目链接:Codeforces 486E LIS of Sequence 题目大意:给定一个数组.如今要确定每一个位置上的数属于哪一种类型. 解题思路:先求出每一个位置选的情况下的最长LIS,由于開始 ...

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

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

  6. codeforces 374A Inna and Pink Pony 解题报告

    题目链接:http://codeforces.com/problemset/problem/374/A 题目意思:给出一个 n 行  m 列 的棋盘,要将放置在坐标点为(i, j)的 candy 移动 ...

  7. CodeForces 670E Correct Bracket Sequence Editor(list和迭代器函数模拟)

    E. Correct Bracket Sequence Editor time limit per test 2 seconds memory limit per test 256 megabytes ...

  8. Codeforces GYM 100114 C. Sequence 打表

    C. Sequence Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description ...

  9. Codeforces 374A - Inna and Pink Pony

    原题地址:http://codeforces.com/contest/374/problem/A 好久没写题目总结了,最近状态十分不好,无论是写程序还是写作业还是精神面貌……NOIP挂了之后总觉得缺乏 ...

随机推荐

  1. FileZilla连接腾讯云Centos7

    现在需要使用ftp快速上传资料去云机备份, 于是想到FileZilla. 生成密匙文件 登录腾讯云--ssh密匙 FileZilla Client 导入密匙文件 填写登录信息 连接 另外记得开放22端 ...

  2. 【python041--构造方法:构造和析造】

    一.魔法方法 1.魔法方法总是被双下划线包围,例如:__init__ 2.为什么在类实例化的时候,有时候需要构造__init__,有时候不需要呢 举例说明: #定义一个矩形的类,需要长和宽两个参数,计 ...

  3. 【python017--函数对象1】

    一.函数 1.定义函数:def  函数名(): 2.调用函数:直接写函数的名称() >>> def MyFirstFunction():    print('this my firs ...

  4. 比较实用的前端 js框架 ,组件 汇总

    一.js 前端ui框架 Kendo UI 商用收费,组件丰富,界面简洁美观,有jQuery和angular两个js的版本 Webix 商用收费,组件丰富,界面特别美观 JQwidgets 商用收费,丰 ...

  5. django基础 -- 5. ORM 数据库操作

    一. ORM 对象关系映射 类   ------   表 类对象   ------   记录 类属性   ------   字段 二.  连接数据库配置 1.在  setting.py 文件中重新设置 ...

  6. topcoder srm 445 div1

    problem1 link 这个的结论是只需要考虑坐标是整数或者是整数.5,比如(2.5,3),(4,3.5),(1.5,4.5)这样的时候.这个详细证明起来应该挺麻烦的.这里有一些讨论. probl ...

  7. Oracle SQL——inner jion;left join;right join的区别和使用场景

    背景 在一次面试的时候,面试官让我说一下这三者的使用场景和区别,当时瞬间懵逼,哈哈.回来赶快看一看,记下来. 详解 inner join 等值查询:返回两张表中,联结字段值相等的组合记录 举例:所有学 ...

  8. P2522 [HAOI2011]Problem b

    还有三倍经验的吗(窒息) 思路 其实就是P3455套了个简单的容斥 把问题转化成f(n,m,k)-f(a-1,m,k)-f(n,b-1,k)+f(a-1,b-1,k)就可以了 和p3455几乎一样的代 ...

  9. 利用C#实现AOP常见的几种方法详解

    利用C#实现AOP常见的几种方法详解 AOP面向切面编程(Aspect Oriented Programming) 是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 下面这篇文章主要 ...

  10. jQuery中的$(window).load()与$(document).ready()以及jquery $(document).ready() 与window.onload的区别

    大多数jQuery实例或教程都告诉我们绑定我们的jQuery代码到$(document).ready事件.虽然$(document).ready 事件在大多数情况下都OK,但是它的解析顺序是在文档准备 ...