bzoj 4415: [Shoi2013]发牌
来源:互联网 发布:男生基本款大衣 知乎 编辑:程序博客网 时间:2024/06/09 14:02
题意:一沓牌从1到n,每次把
题解:二分+树状数组。树状数组记录到某个位置有几张牌,然后每次记录现在是第几张牌。二分找出位置然后再更新就好了。
代码:
#include<cstdio>#include<cstring>int n,s[700010];//存在几张牌int lb(int x){ return x&-x;}void add(int x,int y){ for(int i=x;i<=n;i+=lb(i)) s[i]+=y;}int get(int x){ int ans=0; for(int i=x;i>0;i-=lb(i)) ans+=s[i]; return ans;}int fd(int x){ int l=1,len=n; while(len) { int md=l+(len>>1); if(get(md)<x) { l=md+1; len=len-(len>>1)-1; } else len>>=1; } return l;}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) add(i,1); int now=0; for(int i=1;i<=n;i++) { int x; scanf("%d",&x); x=x%(n+1-i); now=(now+x)%(n+1-i); int hh=fd(now+1); printf("%d\n",hh); add(hh,-1); }}
阅读全文
0 0
- bzoj 4415: [Shoi2013]发牌
- bzoj 4415: [Shoi2013]发牌
- bzoj 4415: [Shoi2013]发牌
- BZOJ 4415 [Shoi2013]发牌【线段树
- 【SHOI2013】【BZOJ4415】发牌
- BZOJ4415 [Shoi2013]发牌
- 4415: [Shoi2013]发牌|线段树|并查集
- BZOJ_P4415 [SHOI2013]发牌(线段树)
- 【BZOJ】4419: [Shoi2013]发微博
- bzoj 4419: [Shoi2013]发微博
- BZOJ 4419 [Shoi2013]发微博
- BZOJ 4419: [Shoi2013]发微博
- [BZOJ 4416][Shoi2013]阶乘字符串
- bzoj 4419: [Shoi2013]发微博 乱搞
- bzoj 4417: [Shoi2013]超级跳马
- bzoj 4417: [Shoi2013]超级跳马
- [状压 DP] BZOJ 4416 [Shoi2013]阶乘字符串
- BZOJ 4416: [Shoi2013]阶乘字符串【状压DP
- 获取数据自动插入列
- 《Python学习手册》学习笔记(12)之第12章if测试和语法规则(关键词:编程语言/Python/if)
- HDU3308线段树区间合并
- put()方法和write()方法
- HDU 5954 Do not pour out(二分+积分)
- bzoj 4415: [Shoi2013]发牌
- Hibernate工具类
- equals方法的覆盖
- 趣图 | 懂算法的程序员,不懂的程序员
- 程序员中的老司机们,30 后的路该开向哪里?
- 公众号“今日作文素材”文章列表 (20171001-20171031)
- BP learning算法简单推导
- 《Python学习手册》学习笔记(13)之第13章while和for循环(关键词:编程语言/Python/while/for)
- Android开发者2017年最值得关注的25个库