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. [css flex布局]实例一,本来还想挺简单的,弄了挺久呢,先写一部分

    全是代码,直接拷走吧,看是不怎么好看的 参考:http://www.ruanyifeng.com/blog/search.html?cx=016304377626642577906%3Ab_e9ska ...

  2. A Code Farmer‘s Entertainment

    My guitar playing and singing 码农的自娱自乐 https://v.youku.com/v_show/id_XNDM4NTY1MTEwNA==.html?spm=a2hzp ...

  3. OpenStack与ZStack深度对比:架构、部署、计算、运维监控等

    摘要 OpenStack从2010年开源至今,已经走过9个年头,其正在进入主流企业市场,但该项目依然面临较难部署和管理的老问题.有一点是毫无疑问的,那就是OpenStack保持着高速增长的态势,超过5 ...

  4. Mac录制或保存视频后如何放大?

    想要在录制和拍摄视频后在喜欢的场景(例如Mark)中放大视频吗?本文将向您展示如何放大视频并通过裁剪视频和“平移和缩放”效果来制作Ken Burns效果.Filmora9是一款功能强大的视频编辑器,具 ...

  5. 一条简单的更新语句,MySQL是如何加锁的?

    看如下一条sql语句: # table T (id )) delete : MySQL在执行的过程中,是如何加锁呢? 在看下面这条语句: : 那这条语句呢?其实这其中包含太多知识点了.要回答这两个问题 ...

  6. day97_11_29

    一.数据存储到mongodb 爬取的数据如果需要存储到mongodb中,要通过item,定义一个存储类.再yield一个类. 数据存储的时候需要进过pipelines,再到setting中配置. fr ...

  7. acwing 850. Dijkstra求最短路 II 模板

    地址 https://www.acwing.com/problem/content/description/852/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求 ...

  8. leetcode-字符串篇

    Implement strStr() /** * Implement strStr(). *  * Return the index of the first occurrence of needle ...

  9. new String()与toString

    str.toString是调用了str这个object对象的类的toString方法.一般是返回这么一个String:[class name]@[hashCode].new String(str)是根 ...

  10. go语言之指针

    package main import "fmt" //指针 //go语言的指针是非常容易学习的,比c中容易很多,他可以更简单的执行一些任务 //与变量类型,使用前需要定义 fun ...