I. query

  • 比赛时候没有预处理因子疯狂t,其实预处理出来因子是\(O(nlog(n))\)级别的
  • 每个数和他的因子是一对偏序关系,因此询问转化为(l,r)区间每个数的因子在区间(l,r)的个数
  • 预处理出来每个位置上的数所有因子的位置,用可持久化线段树维护,区间询问
#include<bits/stdc++.h>
#define ll long long
#define mk make_pair
#define ft first
#define se second
#define pii pair<int,int>
#define db double
#define ls o<<1
#define rs o<<1|1
#define lowbit(x) (x&-x)
using namespace std;
const int M=1e5+5;
int V[M*200];
int lch[M*200],rch[M*200];
int rt[M],tot=0;
vector<int>fac[M];
int p[M],a[M];
int n,m;
void init(int N){
for(int i=1;i<=N;i++){
for(int j=2*i;j<=N;j+=i)
fac[j].push_back(i);
}
} void upd(int &o,int pre,int l,int r,int p){
o=++tot;
V[o]=V[pre];
lch[o]=lch[pre];
rch[o]=rch[pre];
if(p==0||l==r){
V[o]++;
return ;
}
int mid=(l+r)/2;
if(p<=mid)
upd(lch[o],lch[pre],l,mid,p);
else
upd(rch[o],rch[pre],mid+1,r,p);
V[o]=V[lch[o]]+V[rch[o]];
}
int qy(int o,int pre,int l,int r,int L,int R){
if(!o)
return 0;
if(L<=l&&r<=R)
return V[o]-V[pre];
int mid=(l+r)/2;
int ans=0;
if(L<=mid)
ans+=qy(lch[o],lch[pre],l,mid,L,R);
if(R>mid)
ans+=qy(rch[o],rch[pre],mid+1,r,L,R);
return ans;
}
int main(){
cin>>n>>m;
init(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
p[a[i]]=i;
}
for(int i=1;i<=n;i++){
upd(rt[i],rt[i-1],1,n,0);
for(auto v:fac[a[i]])
upd(rt[i],rt[i],1,n,p[v]);
}
while(m--){
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",qy(rt[r],rt[l-1],1,n,l,r));
}
return 0;
}

J. Random Access Iterator

  • 需要计算能成功走到最深节点的概率,对于每个节点,有k次尝试机会,显然计算连续失败k次的概率比较简单

  • \(dp[u]\)代表从u往下走失败的概率,转移为\(dp[u]=(\frac{1}{sz[son]} \Sigma_{son} dp[v])^{sz[son]}\),答案为\(1-dp[root]\)

  • 预处理出来每个节点的高度

  • 树形概率从叶子往上推

M. Longest subsequence

  • 字典序需要严格大于T,意味着下面两种情况满足任一种即可

    • 选出的子序列s只要某一位对应T大,后面的可全选
    • 子序列s所有位和T一样,那么s要比T长
  • 对S贪心,肯定选出的位置越左越好
    • 若S[i]>T[j],则S后面都可以选
    • 若S[i]<T[j],该位不符合要求不能选
    • 若S[i]==T[j],则在S中找到i后面第一个比T[j+1]大的位置更新答案
  • 处理出S[i]后面第一个c可以用序列自动机
#include<bits/stdc++.h>
#define ll long long
#define mk make_pair
#define ft first
#define se second
#define pii pair<int,int>
#define db double
#define ls o<<1
#define rs o<<1|1
#define lowbit(x) (x&-x)
using namespace std;
const int M=1e6+5;
int f[M][27],w[27];
int n,m;
char s[M],t[M];
int main(){
scanf("%d%d",&n,&m);
scanf("%s%s",s,t);
for(int i=0;i<26;i++)
w[i]=-1;
for(int i=n-1;i>=0;i--){
for(int j=0;j<26;j++)
f[i][j]=w[j];
w[s[i]-'a']=i;
}
int ans=-1;
for(int i=t[0]-'a'+1;i<26;i++){
if(f[0][i]>=0){
ans=max(ans,n-f[0][i]);
}
}
int p=0;
for(int i=0;i<n;i++){
if(s[i]<t[p])continue;
if(s[i]>t[p])break;
if(p==m-1){
if(i+1<n)
ans=max(ans,p+1+n-i-1);
break;
}else{
for(int j=t[p+1]-'a'+1;j<26;j++){
if(f[i][j]>=0)
ans=max(ans,p+1+n-f[i][j]);
}
p++;
}
}
cout<<ans<<endl;
return 0;
}

2019徐州网络赛 I J M的更多相关文章

  1. ICPC 2019 徐州网络赛

    ICPC 2019 徐州网络赛 比赛时间:2019.9.7 比赛链接:The Preliminary Contest for ICPC Asia Xuzhou 2019 赛后的经验总结 // 比赛完才 ...

  2. [2019徐州网络赛J题]Random Access Iterator

    题目链接 大致题意:从根节点出发,在节点x有son[x]次等概率进入儿子节点,求到达最深深度的概率.son[x]为x节点的儿子节点个数. 又又又又没做出来,心态崩了. 下来看了官方题解后发觉自己大体思 ...

  3. query 2019徐州网络赛(树状数组)

    query \[ Time Limit: 2000 ms \quad Memory Limit: 262144 kB \] 题意 补题才发现比赛的时候读了一个假题意.... 给出长度为 \(n\) 的 ...

  4. 2019徐州网络赛 H.function

    题意: 先有\(n=p_1^{k_1}p_2^{k_2}\cdots p_m^{k_m}\),定义\(f(n)=k_1+k_2+\cdots+k_m\). 现在计算 \[ \sum_{i=1}^nf( ...

  5. 【树状数组】2019徐州网络赛 query

    (2)首先成倍数对的数量是nlogn级别的,考虑每一对[xL,xR](下标的位置,xL < xR)会对那些询问做出贡献,如果qL <= xL && qR >= xR, ...

  6. 2019徐州网络赛H :function (min25筛)

    题意:f(i)=i的幂次之和. 求(N+1-i)*f(i)之和. 思路:可以推论得对于一个素数p^k,其贡献是ans=(N+1)[N/(P^k)]+P^k(1+2+3...N/(P^k)); 我们分两 ...

  7. 2019徐州网络赛 I.query

    这题挺有意思哈!!!看别人写的博客,感觉瞬间就懂了. 这道题大概题意就是,给一串序列,我们要查找到l-r区间内,满足min(a[ i ],a[ j ]) = gcd(a[ i ],a[ j ]) 其实 ...

  8. 2019 徐州网络赛 center

    题意:n个点,求最小加上几个点让所有点关于一个点(不需要是点集里面的点)中心对称 题解:双重循环枚举,把中点记录一下,结果是n-最大的中点 #include <bits/stdc++.h> ...

  9. The Preliminary Contest for ICPC Asia Xuzhou 2019 徐州网络赛 K题 center

    You are given a point set with nn points on the 2D-plane, your task is to find the smallest number o ...

随机推荐

  1. [转]UiPath Invoke Code

    本文转自:https://dotnetbasic.com/2019/08/uipath-invoke-code.html We will learn step by step tutorial for ...

  2. Java学习笔记-Java文件操作流

     day03 输入输出流:读入写出  节点流:   有明确的来源和去向   往往对字节操作 节点流又叫低级流.字节流   处理流:  没有明确的来源和去向  往往对低级流或其他高级流进行操作,不能独立 ...

  3. SpringCloud之Hystrix:集群容错框架

    分布式环境中,可能会有一些被依赖的服务会失效,影响系统的稳定运行.Hystrix通过添加延迟阈值以及容错的逻辑,以控制分布式系统间组件的交互.Hystrix通过隔离服务间的访问点.停止它们之间的级联故 ...

  4. 【Spring Cloud】Spring Cloud Config 实现分布式配置中心

    Spring Cloud Config 实现分布式配置中心 一.分布式配置中心 分布式系统中,往往拥有大量的服务应用,而每个应用程序都需要有对应的配置文件来协助完成服务环境初始化.运行.因此生产了大量 ...

  5. #r语言(二)笔记

    #r语言(二)笔记 #早复习 #概述:R是用于统计分析.绘图的语言和操作环境 #对象: #数据类型--统称为对象 #向量(vector):用于存储数值型.字符型或逻辑型数据的一维数组. #定义向量: ...

  6. C# $插值符号

    概述 $ 符是在C#6.0出现的一个新特性,本质就是C#的一个语法糖,作用在于替代当前的String.format(),简化其过程.他们的作用都在于为字符串提供占位符,并为字符串传入变量. 用法 关于 ...

  7. leetcode——链表

    206. 反转链表(易) 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->N ...

  8. python uiautomator2 watcher的使用方法

    该方是基于uiautomator2如下版本进行验证的: PS C:\windows\system32> pip show uiautomator2 Name: uiautomator2 Vers ...

  9. leetcode-math

    Reverse Integer /** * Given a 32-bit signed integer, reverse digits of an integer. * */public class  ...

  10. css流星 效果

    style: .loding {     width: 100%;     height: 100%;      }   .bg{     width: 100%;     height: 100%; ...