LuoguU72177 火星人plus (逆康拓展开)
没开long long见祖宗。。。
BIT先求逆序对来造表存展开关系,线段树维护01进制
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define R(a,b,c) for(register int  a = (b); a <= (c); ++ a)
#define nR(a,b,c) for(register int  a = (b); a >= (c); -- a)
#define Max(a,b) ((a) > (b) ? (a) : (b))
#define Min(a,b) ((a) < (b) ? (a) : (b))
#define Fill(a,b) memset(a, b, sizeof(a))
#define Abs(a) ((a) < 0 ? -(a) : (a))
#define Swap(a,b) a^=b^=a^=b
#define ll long long
//#define ON_DEBUG
#ifdef ON_DEBUG
#define D_e_Line printf("\n\n----------\n\n")
#define D_e(x)  cout << #x << " = " << x << endl
#define Pause() system("pause")
#define FileOpen() freopen("in.txt","r",stdin);
#else
#define D_e_Line ;
#define D_e(x)  ;
#define Pause() ;
#define FileOpen() ;
#endif
struct ios{
    template<typename ATP>ios& operator >> (ATP &x){
        x = 0; int f = 1; char c;
        for(c = getchar(); c < '0' || c > '9'; c = getchar()) if(c == '-')  f = -1;
        while(c >= '0' && c <= '9') x = x * 10 + (c ^ '0'), c = getchar();
        x*= f;
        return *this;
    }
}io;
using namespace std;
const int N = 100007;
#define int long long
int n;
namespace BIT{
int t[N];
int tmp[N];
inline void Updata(int x, int w){
	for(; x <= n; x += x&-x) t[x] += w;
}
inline int Query(int x){
	int sum = 0;
	for(; x; x -= x&-x) sum += t[x];
	return sum;
}
inline void CreatContor(){
	R(i,1,n){
		int x;
		io >> x;
		Updata(x, 1);
		tmp[i] = x - Query(x);
//		D_e(tmp[i]);
	}
}
}
namespace SegTree{
int t[N << 2];
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
inline void Pushup(int rt){
	t[rt] = t[rt << 1] + t[rt << 1 | 1];
}
inline void Build(int rt, int l, int r){
	if(l == r){
		t[rt] = 1;
		return;
	}
	int mid = (l + r) >> 1;
	Build(lson), Build(rson);
	Pushup(rt);
}
inline void Updata(int rt, int l, int r, int x){
	if(l == r){
		t[rt] = 0;
		return;
	}
	int mid = (l + r) >> 1;
	if(mid >= x)
		Updata(lson, x);
	else
		Updata(rson, x);
	Pushup(rt);
}
inline int Query(int rt, int l, int r, int w){
	if(l == r) return l;
	int mid = (l + r) >> 1;
	if(t[rt << 1] >= w)
		return Query(lson, w);
	else
		return Query(rson, w - t[rt << 1]);
}
}
#undef int
int main(){
#define int long long
	FileOpen();
	int m;
	io >> n >> m;
	BIT::CreatContor();
	//R(i,1,n) D_e(BIT::tmp[i]) ;
	BIT::tmp[n] += m;
	nR(i,n,1){
		BIT::tmp[i - 1] += BIT::tmp[i] / (n - i + 1);
		BIT::tmp[i] %= (n - i + 1);
	//	D_e(BIT::tmp[i]);
	}
	SegTree::Build(1, 1, n);
	R(i,1,n-1){
		//D_e(BIT::tmp[i]);
		int x = SegTree::Query(1, 1, n, BIT::tmp[i] + 1);
		printf("%d ", x);
		SegTree::Updata(1, 1, n, x);
	}
	printf("%d", SegTree::Query(1, 1, n, BIT::tmp[n] + 1));
	return 0;
}

LuoguU72177 火星人plus (逆康拓展开)的更多相关文章
- 康拓展开 & 逆康拓展开 知识总结(树状数组优化)
		
康拓展开 : 康拓展开,难道他是要飞翔吗?哈哈,当然不是了,康拓具体是哪位大叔,我也不清楚,重要的是 我们需要用到它后面的展开,提到展开,与数学相关的,肯定是一个式子或者一个数进行分解,即 展开. 到 ...
 - hdoj-1027-Ignatius and the Princess II(逆康拓展开)
		
题目链接 /* Name: Copyright: Author: Date: 2018/5/2 11:07:16 Description:输出第m小的序列 */ #include <iostre ...
 - 【康拓展开】及其在求全排列第k个数中的应用
		
题目:给出n个互不相同的字符, 并给定它们的相对大小顺序,这样n个字符的所有排列也会有一个顺序. 现在任给一个排列,求出在它后面的第i个排列.这是一个典型的康拓展开应用,首先我们先阐述一下什么是康拓展 ...
 - ACM/ICPC 之 BFS(离线)+康拓展开(TSH OJ-玩具(Toy))
		
祝大家新年快乐,相信在新的一年里一定有我们自己的梦! 这是一个简化的魔板问题,只需输出步骤即可. 玩具(Toy) 描述 ZC神最擅长逻辑推理,一日,他给大家讲述起自己儿时的数字玩具. 该玩具酷似魔方, ...
 - 九宫重拍(bfs + 康拓展开)
		
问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的局面记为:12 ...
 - 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开
		
[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...
 - Eight (HDU - 1043|POJ - 1077)(A* | 双向bfs+康拓展开)
		
The 15-puzzle has been around for over 100 years; even if you don't know it by that name, you've see ...
 - ACM/ICPC 之 BFS(离线)+康拓展开 (HDU1430-魔板)
		
魔板问题,一道经典的康拓展开+BFS问题,为了实现方便,我用string类来表示字符串,此前很少用string类(因为不够高效,而且相对来说我对char数组的相关函数比较熟),所以在这里也发现了很多容 ...
 - nyoj 139  我排第几个--康拓展开
		
我排第几个 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说 ...
 
随机推荐
- 如何用HMS Core位置和地图服务实现附近地点路径规划功能
			
日常出行中,路径规划是很重要的部分.用户想要去往某个地点,获取到该地点的所有路径,再根据预估出行时间自行选择合适的路线,极大方便出行.平时生活中也存在大量使用场景,在出行类App中,根据乘客的目的地可 ...
 - Node.js精进(2)——异步编程
			
虽然 Node.js 是单线程的,但是在融合了libuv后,使其有能力非常简单地就构建出高性能和可扩展的网络应用程序. 下图是 Node.js 的简单架构图,基于 V8 和 libuv,其中 Node ...
 - Git镜像
			
http://npm.taobao.org/mirrors/git-for-windows/v2.34.1.windows.1/ Git 阿里镜像,高速 下载
 - BUUCTF-另一个世界
			
另一个世界 010editor 打开最下方发现011开头字符串,应该是二进制 得到flag 看也有师傅写的是说八个一组转ascii码,现在也不是很理解啥意思.贴一下其他师傅的python脚本,算出的结 ...
 - mysql中in的用法详解
			
一.基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据. select * from where field in (value1,value2,value3,-) 当 ...
 - Java 图片生成PDF
			
public static void main(String[] args) { String imageFolderPath = "E:\\Tencet\\图片\\test\\" ...
 - Golang并发编程——goroutine、channel、sync
			
并发与并行 并发和并行是有区别的,并发不等于并行. 并发 两个或多个事件在同一时间不同时间间隔发生.对应在Go中,就是指多个 goroutine 在单个CPU上的交替运行. 并行 两个或者多个事件在同 ...
 - 扩展-PageHelper分页插件
			
1.PageHelper 分页插件简介 1) PageHelper是MyBatis中非常方便的第三方分页插件 2) 官方文档: https://github.com/pagehelper/Mybati ...
 - 虚拟机安装Centos7.5详细教程
			
VMware15.5虚拟机安装CentOS7.5详细教程 (前言)软件下载 需要VMware15.5软件和密匙的小伙伴可以从此地址下载:https://pan.baidu.com/s/1A8H ...
 - poste.io自建邮件服务器
			
随便说些什么 腾讯企业邮新增账号不方便,这里的主要是指不经过手机验证或微信扫码的,虽然提供了最多3个"业务邮箱",很明显不够用. EwoMail,装没装起来我不记得了,反正是不好用 ...