博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树解Joseph
阅读量:5336 次
发布时间:2019-06-15

本文共 1224 字,大约阅读时间需要 4 分钟。

#include 
#define MAXN 30000 using namespace std; struct node{
int l,r,m,c; }tree[3*MAXN]; void create(int l,int r,int num){
tree[num].l=l;tree[num].r=r; tree[num].m=(l+r)>>1;tree[num]=r-l; if(l+1!=r){
create(l,tree[num].m,2*num); create(tree[num].m,r,2*num+1); } } int update(int l,int r,int num){
if(tree[num].l==l && tree[num].r==r) return tree[num].c; else if(r<=tree[num].l) update(l,r,2*num); else if(l<=tree[num].r) update(l,r,2*num); else{
update(l,tree[num].m,num); update(tree[num].m,r,num); } } int search(int k,int i){
tree[i].c--; if(tree[i].m==tree[i].l){
printf("%d",t[i].l); return t[i].l } if (t[i].l == t[i].m) {
printf("%d ", t[i].l); return t[i].l; } int s = t[i << 1].c; if (k <= s) return find(k, i << 1); return find(k - s, (i << 1) + 1); int s=tree[2*i].c; if(k<=s) return search(k,2*i); else return search(k-s,2*i+1); } int main() {
int m,n; int i=0; while(scanf("%d%d",&n,&m)!=EOF){
create(1,n+1,1); while(i=update(1,search((i+m)%t[1].c?(i+m)%t[i].c:t[i].c,1),1)) printf("\n"); } return 0; }

 

转载于:https://www.cnblogs.com/Jason-Damon/archive/2012/02/08/2342849.html

你可能感兴趣的文章
PHP zip压缩文件及解压
查看>>
SOAP web service用AFNetWorking实现请求
查看>>
Java变量类型,实例变量 与局部变量 静态变量
查看>>
mysql操作命令梳理(4)-中文乱码问题
查看>>
Python环境搭建(安装、验证与卸载)
查看>>
一个.NET通用JSON解析/构建类的实现(c#)
查看>>
Windows Phone开发(5):室内装修 转:http://blog.csdn.net/tcjiaan/article/details/7269014
查看>>
详谈js面向对象 javascript oop,持续更新
查看>>
关于这次软件以及pda终端的培训
查看>>
jQuery上传插件Uploadify 3.2在.NET下的详细例子
查看>>
如何辨别一个程序员的水平高低?是靠发量吗?
查看>>
新手村之循环!循环!循环!
查看>>
正则表达式的用法
查看>>
线程安全问题
查看>>
SSM集成activiti6.0错误集锦(一)
查看>>
下拉刷新
查看>>
linux的子进程调用exec( )系列函数
查看>>
MSChart的研究
查看>>
C# 索引器
查看>>
MySQLdb & pymsql
查看>>