T1

直接二分就好了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;ll n;
int a,b,d;ll check(ll x)
{ll t1,t2;t1=(ll)(x-a-1)/d+1;if(x>b)t2=(ll)(x-b-1)/d+1;elset2=(ll)(b-x-1)/d+1;return t1+t2;
}ll work1()
{ll ans=max(a,b),l=max(a,b),r=((ll)1<<60),mid,temp;while(l<=r){mid=(l+r)>>1;temp=check(mid);if(temp<=n&&ans<mid)ans=mid;if(l>=r)break;if(temp<=n)l=mid+1;elser=mid-1;}return ans;
}int main(){//freopen("T1.in","r",stdin);
scanf("%lld%d%d%d",&n,&d,&a,&b);--n;cout<<work1();
}

T1

T2

预处理出来每个点

$L_i$ i左边第一个比它大的点的位置

$R_i$ i右边第一个大于等于它的位置(这样是为了统计的时候不重复)

那么K==$a_i$的区间个数就是$$\sum_{a_i==K}(i-L_i)(R_i-i)$$

然后求一下前缀和和后缀和就行了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
inline int read()
{char q=getchar();int ans=0;while(q<'0'||q>'9')q=getchar();while(q>='0'&&q<='9'){ans=ans*10+q-'0';q=getchar();}return ans;
}
inline char readchar()
{char q=getchar();while(q!='<'&&q!='>'&&q!='=')q=getchar();return q;
}
const int N=100006;struct JI
{int ff,pos,val;bool friend operator < (JI a,JI b){return a.val<b.val;}
}ji[N*3];
int ccc;int now;
int n,Q;
int a[N],K[N];
char op[N];void lisan()
{now=0;sort(ji+1,ji+1+ccc);for(int i=1;i<=ccc;++i){if(ji[i].val!=ji[i-1].val)++now;if(ji[i].ff==1)a[ji[i].pos]=now;elseK[ji[i].pos]=now;}
}int L[N],R[N];ll num[N*3],presum[N*3],behsum[N*3];int zhan[N*2],he;
void work()
{a[0]=a[n+1]=0x7fffffff;he=0;zhan[++he]=0;for(int i=1;i<=n;++i){while(a[zhan[he]]<=a[i])--he;L[i]=zhan[he];zhan[++he]=i;}he=0;zhan[++he]=n+1;for(int i=n;i>=1;--i){while(a[zhan[he]]<a[i])--he;R[i]=zhan[he];zhan[++he]=i;}for(int i=1;i<=n;++i)num[a[i]]+=(ll)(i-L[i])*(R[i]-i);for(int i=1;i<=now;++i)presum[i]=presum[i-1]+num[i];for(int i=now;i>=1;--i)behsum[i]=behsum[i+1]+num[i];for(int i=1;i<=Q;++i){if(op[i]=='=')printf("%lld\n",num[K[i]]);elseif(op[i]=='<')printf("%lld\n",presum[K[i]-1]);elseprintf("%lld\n",behsum[K[i]+1]);}
}int main(){freopen("T2.in","r",stdin);n=read();Q=read();for(int i=1;i<=n;++i){++ccc;ji[ccc].val=read();ji[ccc].ff=1;ji[ccc].pos=i;}for(int i=1;i<=Q;++i){op[i]=readchar();++ccc;ji[ccc].ff=2;ji[ccc].val=read();ji[ccc].pos=i;}lisan();work();
}

T2

T3

$f_i$ 所有排列长度为 i 排完序所需要的总步数

那么 $$f_i=i*f_{i-1}+(2^{i-1}-1)*fac_{i-1}$$

我们考虑第 i 位都是谁

是i时,直接加上$f_{i-1}$

1时,加上$f_{i-1}+2^0*fac_{i-1}$

...

然后求和就可以 $O(n)$ 了

解释一下转移:

fac就是阶乘,即长度为 i-1 的排列个数

每次在长度i-1的后面添加一个数x (当然,前i-1个数里可能有i)

那把x扔到第x位需要$2^{x-1}$次(i需要0次)

证明:

比如 3  1  2 弄成 1 2 3 需要3次

4  1  2  3 弄成 1 2 4 3 也需要3次

因为 4可以看成3 再把 3扔到开头到有序,又相当于重复了一遍3  1  2 到  1  2  3 的过程

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define ll long long
#define dd double
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N=100006;
const int mod=1e9+7;ll qpow(ll a,int ci)
{ll ans=1;while(ci){if(ci&1)ans=ans*a%mod;a=a*a%mod;ci>>=1;}return ans;
}ll jie[N],jieni[N];
void chu()
{jie[0]=1;for(int i=1;i<N;++i)jie[i]=jie[i-1]*i%mod;jieni[N-1]=qpow(jie[N-1],mod-2);for(int i=N-2;i>=1;--i)jieni[i]=jieni[i+1]*(ll)(i+1)%mod;jieni[0]=1;
}int n;
ll f[N],mi[N];int main(){chu();scanf("%d",&n);mi[0]=1;for(int i=1;i<=n;++i){mi[i]=mi[i-1]*2%mod;f[i]=f[i-1]*i%mod+(mi[i-1]-1+mod)%mod*jie[i-1]%mod;}printf("%lld", f[n]%mod*jieni[n]%mod );
}

T3

想不出来也是一种无奈...

转载于:https://www.cnblogs.com/A-LEAF/p/7660543.html

10.13 上午 考试相关推荐

  1. 2012年信息系统项目管理师下半年上午考试习题与答案解析

    2012年下半年上午考试习题与答案解析 1.某信息系统项目采用原型法开发,以下做法中不正确的是(1) A.前期花足够的时间与客户充分沟通,完全明确需求后再开发实现 B.系统分析.设计和实现工作之间不做 ...

  2. 软考网络工程师上午考试知识点总结整理

    楼主顺利通过了软考网络工程师中级资格考试,在复习过程中对上午考试的知识点进行了总结,总结了很多,但可能条理性不够强,但都是一些难掌握或者重点,常考的点,所以分享出来,可以帮助大家复习准备~ 第一章 编 ...

  3. 在macOS 10.13.6上安装go 1.13.8实录

    因为一些原因,需要在rMBP上开发Go程序,下面记录一下在macOS 10.13.6上安装Go 1.13.8的过程. 其实整个过程非常简单,使用HomeBrew来安装和升级软件非常方便.就一行命令搞定 ...

  4. 系统升级到10.13之后cocoapods安装失败问题解决办法

    系统升级到最新版本(10.13.x)之后发现cocoapods更新失败了,重新安装之后也提示如下错误: $ pod setup -bash: /usr/local/bin/pod: /System/L ...

  5. lightgbm过去版本安装包_云顶手游10.13安装包,6月24日

    重要:此次更新是季中版本,完整版本号:10.13.3257485安卓安装包在下方,苹果请用国外Apple ID登录App Store,搜索TFT下载或更新版本,教程在公众号菜单栏.安卓安装包下载方式: ...

  6. 七周三次课(11月29日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...

    2019独角兽企业重金招聘Python工程师标准>>> 10.11 Linux网络相关 ifconfig 查看网卡ip (yum install net-tools) 安装 -a   ...

  7. 电动力学每日一题 2021/10/13 用Fourier变换法计算静止电荷产生的电场

    电动力学每日一题 2021/10/13 用Fourier变换法计算静止电荷产生的电场 静止点电荷 具有均匀线密度的静止电荷产生的电场 具有均匀面密度的静止电荷产生的电场 用Fourier变换法计算电场 ...

  8. 七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...

    七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法 ====== ...

  9. java db 10.4.13_Spring Data MongoDB 1.10.13和Mongo 3.4

    我正在尝试从Mongo 3.2升级到Mongo 3.4 . 我更新了我的POM以使用最新的Spring Data MongoDB(1.10.13),同时这样做,我注意到Spring Data Mong ...

最新文章

  1. string.Join和Reverse的简单使用示例
  2. 分布式消息技术 Kafka
  3. 在Windows XP 中使用Active Directory(活动目录)
  4. 使用Jquery 结合后台数据库显示类似QQ图片中心
  5. 三星s9android recovery,三星手机怎么进入recovery模式?详细图文教程指导
  6. FinalShell SSH工具下载
  7. 一篇极好的 CSS 教程 (ZZ)
  8. 伪代码之KMeans和DBSCAN
  9. 麒麟MIPS:用光盘安装提示Out Of Memory,用U盘安装成功
  10. Unity3D 5.0软件安装教程
  11. Postman中文版 !!!!傻瓜教程
  12. Elastic 配置 TLS 加密传输
  13. (简单)SQL练习13:从titles表获取按照title进行分组
  14. AI领域首位图灵奖得主Marvin Minsky:求索“智能”奥秘的一生 | 人物志
  15. 【思考】人脸认证真的准确吗?通过身份证的人脸对比有哪些问题?
  16. AlexNet VGGNet ResNet 对比 简介
  17. 插件 实用的窗口置顶小工具 TopMost
  18. STLINK驱动安装不正确问题简单记录
  19. linux隧道6rd配置
  20. el-table 树形表格 自定义展开图标_iOS 14自定义桌面太美了 手把手教你重温青春...

热门文章

  1. unity3d 自动变化大小_一种可扩展的Unity3d资源检查方式
  2. redis 一般启动几个 哨兵_Redis6.0主从、哨兵、集群搭建和原理
  3. 如果让我重做一次研究生--王泛森院士
  4. 【编译原理】文法的基本概念
  5. ajax绑定事件页面重复提交,ajax防止用户重复提交点击事件
  6. linux搭建flask环境,Ubuntu 环境下搭建Flask框架
  7. linux里如何创建c文件夹,使用c语言在Linux中的/ tmp文件夹中创建文本文件
  8. 【超分辨率实验】基于高斯模糊的训练数据集构建方法改进(matlab)
  9. POJ 3267为什么优先队列超时,DP就能过,难过
  10. ERROR: Can't get master address from ZooKeeper; znode data == null