题目链接:

[PKUSC2018]真实排名

对于每个数$val$分两种情况讨论:

1、当$val$不翻倍时,那么可以翻倍的是权值比$\frac{val-1}{2}$小的和大于等于$val$的。

2、当$val$翻倍时,显然权值在$[val,val*2-1]$的都要翻倍,剩下可以翻倍的是权值比$val$小的和大于等于$2*val$的。

用权值线段树维护权值,剩下的就是一步组合数。注意对$val=0$的特判。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<cstdio>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const int mod=998244353;
const int INF=1000000000;
int fac[100010];
int inv[100010];
int sum[10000000];
int ls[10000000];
int rs[10000000];
int cnt;
int n,k;
int a[100010];
int root;
void change(int &rt,int l,int r,int k)
{
if(!rt)
{
rt=++cnt;
}
sum[rt]++;
if(l==r)
{
return ;
}
int mid=(l+r)>>1;
if(k<=mid)
{
change(ls[rt],l,mid,k);
}
else
{
change(rs[rt],mid+1,r,k);
}
}
int query(int rt,int l,int r,int L,int R)
{
if(L>R||!rt)
{
return 0;
}
if(L<=l&&r<=R)
{
return sum[rt];
}
int mid=(l+r)>>1;
int res=0;
if(L<=mid)
{
res+=query(ls[rt],l,mid,L,R);
}
if(R>mid)
{
res+=query(rs[rt],mid+1,r,L,R);
}
return res;
}
int C(int n,int m)
{
if(n<m||m<0)
{
return 0;
}
return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int solve(int val)
{
int ans=0;
int num=0;
int sum=0;
if(!val)
{
num=n-1;
ans=(ans+C(num,k))%mod;
ans=(ans+C(num,k-1))%mod;
}
else
{
num+=query(root,0,INF,0,(val-1)/2);
num+=query(root,0,INF,val,INF)-1;
ans=(ans+C(num,k))%mod;
num=0;
num+=query(root,0,INF,2*val,INF);
num+=query(root,0,INF,0,val-1);
sum+=query(root,0,INF,val,val*2-1);
ans=(ans+C(num,k-sum))%mod;
}
return ans;
}
int main()
{
scanf("%d%d",&n,&k);
fac[0]=fac[1]=inv[0]=inv[1]=1;
for(int i=2;i<=n;i++)
{
fac[i]=1ll*fac[i-1]*i%mod;
inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
}
for(int i=2;i<=n;i++)
{
inv[i]=1ll*inv[i]*inv[i-1]%mod;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
change(root,0,INF,a[i]);
}
for(int i=1;i<=n;i++)
{
printf("%d\n",solve(a[i]));
}
}

[PKUSC2018]真实排名——线段树+组合数的更多相关文章

  1. BZOJ_5368_[Pkusc2018]真实排名_组合数

    BZOJ_5368_[Pkusc2018]真实排名_组合数 Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他 ...

  2. 【LOJ4632】[PKUSC2018]真实排名

    [LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排 ...

  3. [PKUSC2018]真实排名

    [PKUSC2018]真实排名 题目大意: 有\(n(n\le10^5)\)个人,每个人有一个成绩\(A_i(0\le A_i\le10^9)\).定义一个人的排名为\(n\)个人中成绩不小于他的总人 ...

  4. 「Luogu P5368 [PKUSC2018]真实排名」

    PKUSC签到题 题目大意 给出一个长度为 \(N\) 的序列,序列中有 \(K\) 个数会乘二,对于每个数计算在乘二后大于等于这个数的个数与乘二前没有发生变化的方案数. 分析 思路很清晰,可以将答案 ...

  5. LOJ6432 [PKUSC2018] 真实排名 【组合数】

    题目分析: 做三个指针然后预处理阶乘就行. 题目代码: #include<bits/stdc++.h> using namespace std; ; ; int n,k; struct n ...

  6. bzoj5368 [Pkusc2018]真实排名

    题目描述: bz luogu 题解: 组合数计数问题. 首先注意排名指的是成绩不小于他的选手的数量(包括他自己). 考虑怎么增大才能改变排名. 小学生都知道,对于成绩为$x$的人,让他自己不动并让$\ ...

  7. BZOJ5368:[PKUSC2018]真实排名(组合数学)

    Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他的选手的数量(包括他自己). 例如如果333位选手的成绩分别 ...

  8. bzoj 5368: [Pkusc2018]真实排名

    Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是 :成绩不小于他的选手的数量(包括他自己).例如如果3位选手的成绩分别是[ ...

  9. 【洛谷5368】[PKUSC2018] 真实排名(组合数学)

    点此看题面 大致题意: 有\(n\)个数字,定义一个数的排名为不小于它的数的个数.现要随机将其中\(k\)个数乘\(2\),求对于每个数有多少种方案使其排名不变. 分类讨论 对于这种题目,我们可以分类 ...

随机推荐

  1. Vuex 刷新后数据丢失问题 Typescript

    问题描述:Vuex保存的数据在页面刷新后会全部丢失清除 问题解决方案:使用sessionstorage进行保存,在页面刷新时保存至sessionStorage,页面在加载时再进行填充   (另有vue ...

  2. Go 互斥锁(sync.Mutex)和 读写锁(sync.RWMutex)

    什么时候需要用到锁? 当程序中就一个线程的时候,是不需要加锁的,但是通常实际的代码不会只是单线程,所以这个时候就需要用到锁了,那么关于锁的使用场景主要涉及到哪些呢? 多个线程在读相同的数据时 多个线程 ...

  3. 使用node建立本地服务器访问静态文件

    最终目录结构 demo │ node_modules └───public │ │ index.html │ │ index.css │ └───index.js └───server.js 一.使用 ...

  4. Android简单闹钟设置

    利用AlarmManager实现闹钟设置 //设置本地闹钟,actiongString:闹钟标识 setLocAlarm(int week, String actionString) { Calend ...

  5. iOS testflight 使用说明

    一.告知开发者苹果手机的账户邮箱 1.通过任何形式告知即可 2.下载testflight 二.开发者发送激活邮件到测试者的账户邮箱 1.进入邮箱查看邮件点击 Accept invitation 进行下 ...

  6. select加锁分析(Mysql)

    [原创]惊!史上最全的select加锁分析(Mysql) 前言 大家在面试中有没遇到面试官问你下面六句Sql的区别呢 select * from table where id = ? select * ...

  7. Sql Server 2017 安装问题记录

    记录了我在虚拟机中安装Sql server 2017遇到的一些问题. 安装环境: Sql server 2017 + Windows Server 2012 R2 提供两个网上的下载链接: https ...

  8. SQLSERVER视图错位的解决办法

    原始需求如下: 有一个表T1 create table t1 (id int not null primary key ,v1 ) ) ,'aaa'); ,'bbb'); 有一个表TS,用于记录T1中 ...

  9. Java:JVM的内存模型

    JVM内存模型 JVM内存模型可以分为两个部分,如下图所示,堆和方法区是所有线程共有的,而虚拟机栈,本地方法栈和程序计数器则是线程私有的.   1. 堆(Heap) 堆内存是所有线程共有的,可以分为两 ...

  10. LOJ 2452 对称 Antisymmetry——用hash求回文串数

    概念 用hash求最长回文串/回文串数 首先,易知,回文串具有单调性. 如果字符串 $s[l...r]$ 为回文串串,那么 $s[x...y]$($l < x, y < r$ 且 $|l- ...