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,直接把这个数放进去,把这个数的位子加一。然后更新的时候,首先查询到小于等于序列长度的那些数,表示要删除在该序列的第几个数,然后用二分找到这个数,但是这里不能直接删除,要先保存,然后等所有的数都找完了,再进行统一删除。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 const int N=1e6+10; 7 int c[N],a[N],ans[N],top,as[N]; 8 int n,m,sum; 9 void init(){ 10 memset(c,0,sizeof(c)); 11 memset(a,0,sizeof(a)); 12 memset(ans,-1,sizeof(ans)); 13 top=0; 14 } 15 int lowbit(int x){ 16 return x&(-x); 17 18 } 19 void add(int x,int val){ 20 while(x<=m){ 21 c[x]+=val; 22 x+=lowbit(x); 23 } 24 } 25 26 int getsum(int x){ 27 int ans=0; 28 while(x){ 29 ans+=c[x]; 30 x-=lowbit(x); 31 } 32 return ans; 33 } 34 void work(int num,int ct){ 35 int l=1,r=m; 36 while(l<r){ 37 int mid=(l+r)/2; 38 //printf("%d\n",mid); 39 if(getsum(mid)>=num)r=mid; 40 else 41 l=mid+1; 42 } 43 as[ct]=l; 44 } 45 int t; 46 int main(){ 47 while(~scanf("%d%d",&m,&n)){ 48 init(); 49 for(int i=1;i<=n;i++){ 50 scanf("%d",&a[i]); 51 } 52 for(int i=1;i<=m;i++){ 53 scanf("%d",&t); 54 if(t==0||t==1){ 55 ans[++top]=t; 56 sum++; 57 add(top,1); 58 } 59 else{ 60 int temp=lower_bound(a+1,a+n+1,sum)-a; 61 if(temp>n)temp--; 62 else if(a[temp]>sum)temp--; 63 sum-=temp; 64 // printf("%d\n",temp); 65 for(int i=1;i<=temp;i++) 66 work(a[i],i); 67 for(int i=1;i<=temp;i++){ 68 add(as[i],-1); 69 ans[as[i]]=-1; 70 } 71 } 72 73 } 74 bool flag=false; 75 for(int i=1;i<=m;i++){ 76 if(ans[i]==-1)continue; 77 printf("%d",ans[i]); 78 flag=true; 79 } 80 if(!flag)printf("Poor stack!"); 81 puts(""); 82 83 } 84 }
View Code
转载于:https://www.cnblogs.com/chujian123/p/3892151.html
Inna and Sequence相关推荐
- Codeforces Round #220 (Div. 2)
A. Inna and Pink Pony 题意:给出如下参数, n, m, i, j, a, b (1 ≤ n, m ≤ 106; 1 ≤ i ≤ n; 1 ≤ j ≤ m; 1 ...
- 线段树详解 (原理,实现与应用)
线段树详解 By 岩之痕 目录: 一:综述 二:原理 三:递归实现 四:非递归原理 五:非递归实现 六:线段树解题模型 七:扫描线 八:可持久化 (主席树) 九:练习题 一:综述 假设有编号从1到n的 ...
- 【转载】线段树题目2
1.hdu1166 敌兵布阵 更新节点,区间求和. 2.hdu1754 I Hate It 更新节点,区间最值. . 3.hdu1698 Just a Hook 成段更新,总区间求和. . 4.hdu ...
- Bi-LSTM-CRF for Sequence Labeling
做了一段时间的Sequence Labeling的工作,发现在NER任务上面,很多论文都采用LSTM-CRFs的结构.CRF在最后一层应用进来可以考虑到概率最大的最优label路径,可以提高指标. 一 ...
- Oracle 12C -- 基于sequence的列的默认值
12C支持先创建一个sequence,然后再将该sequence指定为某个列的值的默认表达式. 和"identity column"具有以下不同点: ·对列的个数没有限制 ·seq ...
- DP UVALive 6506 Padovan Sequence
题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...
- HDOJ-2062 :Subset sequence(DP)
题目:求子集序列 Consider the aggregate An= { 1, 2, -, n }. For example, A1={1}, A3={1,2,3}. A subset sequen ...
- Gold Code,Gold Sequence
Gold Code Gold Code是以Robert Gold的名字命名的.它是一组特殊的二进制随机(伪随机)序列,其中成员序列之间的相关性很小.由于这种特性(较小的相关性),它被广泛地用作各种无线 ...
- HDU 1711 Number Sequence(KMP算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...
最新文章
- __new__ __init__区别
- Python类与对象技巧(2):拓展子类属性
- java输入流读取几行文本_Java基础笔记Day_16
- 2d fft matlab,证明2D-FFT能够拆分成两个1D-FFT
- MATLAB double、str、cell间的类型转换
- linux内核的I2C子系统详解4——i2c-s3c2410.c文件中的adapter、algorithm
- android ListView几个比较特别的属性
- 局域网如何通过SSH 2连接上VMware 10虚拟机新装的centOS系统远程登录
- vscode-代码文件对比
- python编写txt阅读器程序_Python 制作简易小说阅读器
- 百度地图和谷歌地图经纬度互转
- 法国语言学校c1,法国留学的语言要求是什么?
- java访问domino数据库_关于Java与Domino数据库之间的操作
- unraid虚拟linux系统,unRAID Linux环境下自作启动U盘
- 【HDU3292】数学_佩尔方程
- 关于 css 中的转换属性,CSS3中的transform转换属性
- ViewData与ViewBag的使用和区别
- 主共振、超谐波共振、亚谐波共振与次共振
- BNET创始人刘建军:BNET破解当今通信网络三大痛点
- acm的比赛经验和组队说明
热门文章
- 说一下StoreBoard和纯代码编程各有什么好处吧
- 设计模式系列--Strategy
- checksum table 【转】
- 最新版FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用简解(提供博客园本地下载)
- Web安全(下)---主动类安全产品技术分析
- Android Glide加载图片成圆形
- Android 如何在App中启动系统闹钟
- MySQL函数大全 及用法示例
- 怎么解决64位Access与32位不能同时安装的问题
- 2018年12月7日 字符串格式化2 format与函数1