考场

很紧张,上午考太烂了

开场看到“影魔”,想起以前看过(但没做),心态爆炸,咆哮时被 hkh diss 了

T1 一开始想建边跑最长路,每个点在记录一下 \(\min\{a\}\),发现有问题。改成 DP,\(f[i,j]\) 表示前 \(i\) 个水晶只选选 \(a\ge j\) 的最长路,每次从 \(f[i-1][b[i]+1..\max\{a,b\}]\) 转移。

T2 隐约记得是线段树,具体想不起来了。发现 \(d=10^9\) 可以离线,线段树合并。

T3 先想了想 DP,发现不好去重,于是掉进序列自动机的大坑再也没出来。画了一页草稿纸只找到了一个 \(O(|S|L^2\log|S|)\) 的正确性不会证的做法。在想题的 1h 中这个题大概就废了 30min。

T1 写完暴力肉眼观察,想到把第二维改成线段树,以 \(a[i]\) 分界,变成区间查询 \(\max\),区间取 \(\max\),写完过不了样例,发现离散化锅了,后来顿悟 \(b[i]+1..a[i]\) 是区间加,发现自己不会推 \(\text{max,add}\) 两个懒标记,胡了半天也过不去,此时已经 8.20 了。

赶紧上了个厕所开始写 T2 T3 的暴力,T2 的部分分也没顾上写就 9.00 了。。。当时以为 9.20 结束,就很慌(T1 还处于爆 \(0\) 状态),想了想决定冲 T1,改了一堆地方最终在不到 9.20 过了样例开拍(但是以为懒标记推对了,考后发现是区间取 \(\max\) 改成了单点)。交题的时候发现 9.40 结束?!又开始 Rush T2 的部分分,仔细一想子树拉到 dfs 序上就变成了《HH的项链》,但是忘记了 BIT 的做法,于是大力卡常写了莫队,好在写完了。

res

rk3 90+50+50

T1 离散化出锅挂了 10pts,只能说数据水

T2 大力卡常能过随机数据的 10pts,小亏

rk1 杨卓凡 100+50+100

rk5 马瑞暄 60+60+50

队长快跑

线段树优化 DP

考场 shit
const int N = 1e5+5;
int n,a[N],b[N]; int mx,ans,lsh[N*2]; #define ls (u<<1)
#define rs (u<<1|1)
struct Seg {
int l,r,mx,add,lt;
} t[N*8];
void up(int u) { t[u].mx = max(t[ls].mx,t[rs].mx); }
void addd(int x,int u) { t[u].mx += x, t[u].lt += x, t[u].add += x; }
void maxx(int x,int u) { t[u].mx = max(t[u].mx,x), t[u].lt = max(t[u].lt,x); }
void down(int u) {
addd(t[u].add,ls), addd(t[u].add,rs);
maxx(t[u].lt,ls), maxx(t[u].lt,rs);
t[u].lt = t[u].add = 0;
}
void build(int u,int l,int r) {
t[u].l = l, t[u].r = r;
if( l == r ) return;
int mid = l+r>>1;
build(ls,l,mid), build(rs,mid+1,r);
}
int query(int u,int l,int r) {
if( l <= t[u].l && t[u].r <= r ) return t[u].mx;
down(u);
int res = 0;
if( l <= t[ls].r ) res = query(ls,l,r);
if( t[rs].l <= r ) res = max(res,query(rs,l,r));
return res;
}
void add(int u,int l,int r) {
if( l <= t[u].l && t[u].r <= r ) { addd(1,u); return; }
// if( t[u].l == t[u].r ) { ++t[u].mx; return; }
down(u);
if( l <= t[ls].r ) add(ls,l,r);
if( t[rs].l <= r ) add(rs,l,r);
up(u);
}
void modify(int u,int l,int r,int x) {
if( l <= t[u].l && t[u].r <= r ) { maxx(x,u); return; }
down(u);
if( l <= t[ls].r ) modify(ls,l,r,x);
if( t[rs].l <= r ) modify(rs,l,r,x);
up(u);
}
#undef ls
#undef rs
/*
void debug() {
For(i,1,mx) printf("%d ",query(1,i,i));
putchar(10);
// For(i,1,n*8) if( t[i].l )
// printf("> [%d,%d] %d\n",t[i].l,t[i].r,t[i].mx);
}
*/
signed main() {
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
read(n);
For(i,1,n) read(a[i],b[i]), lsh[i] = a[i], lsh[i+n] = b[i];
sort(lsh+1,lsh+n*2+1);
mx = unique(lsh+1,lsh+n*2+1)-lsh-1;
For(i,1,n)
a[i] = lower_bound(lsh+1,lsh+mx+1,a[i])-lsh,
b[i] = lower_bound(lsh+1,lsh+mx+1,b[i])-lsh;
build(1,1,mx);
// debug();
For(i,1,n) {
if( b[i] < a[i] ) {
add(1,b[i]+1,a[i]);
if( a[i] < mx ) modify(1,a[i],a[i],query(1,a[i]+1,mx)+1);
} else if( b[i] < mx ) modify(1,a[i],a[i],query(1,b[i]+1,mx)+1);
// debug();
}
printf("%d",t[1].mx);
return 0;
}

影魔

先说在线做法:

考虑没有深度限制,那就找到每个点 \(u\) 在 dfs 序上同色的前驱 \(pre\)、后继 \(suf\),然后树上差分+容斥 \(u+1,lca(pre,u)-1,lca(u,suf)-1,lca(pre,suf)+1\),线段树维护子树和。

有深度限制就按深度插入主席树。每个版本上要修改多次,注意细节。

code
const int N = 1e5+5;
int n,m,fa[N],col[N];
vector<int> to[N]; int ind,mxdep,dep[N],siz[N],son[N],top[N],dfn[N],id[N],rt[N];
queue<int> que;
set<int> st[N]; void dfs1(int u) {
dep[u] = dep[fa[u]]+1, mxdep = max(mxdep,dep[u]);
siz[u] = 1;
for(int v : to[u]) {
dfs1(v);
siz[u] += siz[v];
if( siz[v] > siz[son[u]] ) son[u] = v;
}
}
void dfs2(int u,int tp) {
top[u] = tp, dfn[u] = ++ind, id[ind] = u;
if( son[u] ) dfs2(son[u],tp);
for(int v : to[u]) if( v != son[u] ) dfs2(v,v);
}
int lca(int u,int v) {
while( top[u] != top[v] ) {
if( dep[top[u]] < dep[top[v]] ) swap(u,v);
u = fa[top[u]];
}
return dep[u]<dep[v] ? u : v;
} #define mid ((l+r)>>1)
class HJT {
private:
struct Seg {
int ch[2],siz;
#define ls(x) t[x].ch[0]
#define rs(x) t[x].ch[1]
} t[N*68];
public:
void insert(int u,int &v,int l,int r,int p,int x) {
t[ v=++ind ] = t[u], t[v].siz += x;
if( l == r ) return;
if( p <= mid ) insert(ls(u),ls(v),l,mid,p,x);
else insert(rs(u),rs(v),mid+1,r,p,x);
}
int query(int u,int l,int r,int ql,int qr) {
if( !u || (ql <= l && r <= qr) ) return t[u].siz;
int res=0;
if( ql <= mid ) res = query(ls(u),l,mid,ql,qr);
if( mid < qr ) res += query(rs(u),mid+1,r,ql,qr);
return res;
}
} hjt;
#undef mid signed main() {
read(n,m);
For(i,1,n) read(col[i]);
For(i,2,n) {
read(fa[i]);
to[fa[i]].pb(i);
}
dfs1(1), dfs2(1,1);
ind = 0;
que.push(1);
while( !que.empty() ) {
int u = que.front(), pre=0, suf=0; que.pop();
auto it = st[col[u]].upper_bound(dfn[u]);
if( it != st[col[u]].end() ) suf = id[*it];
if( it != st[col[u]].begin() ) pre = id[*--it];
if( !rt[dep[u]] ) hjt.insert(rt[dep[u]-1],rt[dep[u]],1,n,dfn[u],1);
else hjt.insert(rt[dep[u]],rt[dep[u]],1,n,dfn[u],1);
if( pre ) hjt.insert(rt[dep[u]],rt[dep[u]],1,n,dfn[lca(pre,u)],-1);
if( suf ) hjt.insert(rt[dep[u]],rt[dep[u]],1,n,dfn[lca(u,suf)],-1);
if( pre && suf )
hjt.insert(rt[dep[u]],rt[dep[u]],1,n,dfn[lca(pre,suf)],1);
st[col[u]].insert(dfn[u]);
for(int v : to[u]) que.push(v);
}
while( m-- ) {
int u,d; read(u,d);
printf("%d\n",
hjt.query(rt[min(dep[u]+d,mxdep)],1,n,dfn[u],dfn[u]+siz[u]-1));
}
return 0;
}

但这个题没有强制在线,我们就可以离线水过去,而且时间、代码复杂度吊打在线做法。

这个离线做法的统计答案部分与树上逆序对有点像。

抛硬币

出题人说是“⼀道送温暖的⼩⽔题”,本场最简单的题。。。

设 \(f[i,j]\) 为前 \(i\) 个字符中长度为 \(j\) 的本质不同子序列数。显然有 \(f[i,j]=f[i-1,j]+f[i-1,j-1]\)。问题在于会算重,那么找到最大的 \(lst\) 使 \(lst<i,s[lst]=s[i]\),算重的部分即为 \(f[lst-1,j-1]\)

code
const int N = 3005, mod = 998244353;
int l;
char s[N]; int n,lst[26],f[N][N]; signed main() {
scanf("%s%d",s+1,&l); n = strlen(s+1);
For(i,0,n) f[i][0] = 1;
For(i,1,n) {
int x = s[i]-'a';
For(j,1,l) {
f[i][j] = (f[i-1][j] + f[i-1][j-1]) %mod;
if( lst[x] ) f[i][j] = (f[i][j] - f[lst[x]-1][j-1] +mod) %mod;
}
lst[x] = i;
}
printf("%d",f[n][l]);
return 0;
}

20200713晚 noip14的更多相关文章

  1. 亲临现场不是梦,2017央视春晚推出VR直播

    自里约奥运会首次试水VR直播 后,用户开始关注这种观影方式,一瞬间VR直播开始流行.就在月初,江苏卫视宣布2017年跨年晚会将进行VR全景直播.当然,央视是绝对不会错过这中潮流方式. 据悉,央视201 ...

  2. MSSQL日志传送出现“LSN 太晚,无法应用到数据库”

    一个月之前配置了日志传送的数据库,在今天早上收到作业警报:"LSRestore_ServerName_Databasename"运行失败,到历史记录中查看,错误信息如下 消息 20 ...

  3. 献给广大it从业人士:早睡早起,晚睡也早起

    早睡早起占人体健康的百分之七十:心态.饮食.及时调理各占百分之十,我们就可以知道早睡早起的重要性. 我们白天是放电,晚上睡觉是充电.晚上只冲了50%的电,白天还要释放100%,那50%哪来的?就是从五 ...

  4. 屌丝逆袭--Asp.net快速入门学习教程 第1晚

    本人屌丝一名,因工作原因,不能白天学习编程,所以只能做夜猫子学习编程,期待一天能逆袭成一名高帅富的技术大牛(靠,都想到流口水了........囧). 本教程记录本屌丝学习Asp.net的过程,大牛就飞 ...

  5. 又折腾到这么晚 , 图片Viewpager PagerIndicator,listview 和侧边栏滑动的事件处理

    代码 思路 根据坐标判断 事件是否拦截 调用 getParent().requestDisallowInterceptTouchEvent(true);方法告诉上层ViewGroup 是否拦截 返回t ...

  6. 10月12号 晚八点 Speed-BI 云平台-基于Excel数据源的管理驾驶舱构建全过程,腾讯课堂开课啦

    认真地做了一大摞一大摞的报表,老板没时间看?努力把能反馈的内容都融汇进图表里,老板嫌复杂?做了几个简单的报表,老板一眼就觉得信息不全面?每个报表都用了各种各样的图表,老板却毫无兴趣?明明很努力了,为什 ...

  7. 大晚上装CocoaPods出现错误坑爹

    大晚上装CocoaPods出现错误坑爹 [!] Pod::Executable clone 'https://github.com/CocoaPods/Specs.git' master xcrun: ...

  8. myeclipse中控制台日志比实际晚8小时解决方法及java日志处理

    今天终于忍不住要解决myeclipse控制台中日志显示比实际晚8小时的问题,开始以为myeclipse编辑器时间问题,后来想想不对,myeclipse控制台打印的是tomcat的日志,随后以为是log ...

  9. win7和ubuntu双系统,win7时间晚8小时解决办法。

    装了Win7和Ubuntu双系统后发现,使用Ubuntu后再登陆win7时系统显示时间不准确,比实际时间晚了8小时. 搜索后发现原来Linux和Windows的系统时间管理是不同的.Linux是以主板 ...

随机推荐

  1. 远程访问Jupyter Notebook的两种方式:命令行和配置文件

    远程访问Jupyter Notebook的两种方式:命令行和配置文件 相关配置:Ubuntu 16.04服务器,本地Win10,使用了Xshell,Xftp工具. 相关配置主要分为三步: 服务器上的J ...

  2. ubuntu 权限管理设置

    最近工作中涉及文件操作的内容较多,所以会出现各种各样的权限不足问题,导致操作失败.下面就来讲解下我碰到这种问题是通过什么的方法解决的 一.用户和权限 用户 是 Linux 系统工作中重要的一环,用户管 ...

  3. PaddlePaddle之猫狗大战(本地数据集)

    新手入门PaddlePaddle的一个简单Demo--猫狗大战 主要目的在于整体了解PP用卷积做图像分类的流程,以及最最重要的掌握自定义数据集的读取方式 猫狗数据集是从网络上下载到工作目录的. 本项目 ...

  4. 如何在Spring Data MongoDB 中保存和查询动态字段

    原文: https://stackoverflow.com/questions/46466562/how-to-save-and-query-dynamic-fields-in-spring-data ...

  5. NSIS 制作自动升级包

    1:首先定义基础变量 !define PRODUCT_NAME "XXX"//补丁名称 !define PRODUCT_VERSION "3"//版本号 !de ...

  6. 关于XSS简单介绍与waf bypass的一些思路整理

    很久没写东西了,今天整理一点儿思路 简单说一下XSS XSS(cross site script)即跨站脚本,侧重于"脚本"这一层概念,是一种常见web安全漏洞.攻击者通过往web ...

  7. 入门Kubernetes-StatefulSets

    前言: 前面文中对通过DaemonSet.存储资源对象,实现了在指定节点中运行一个守护进程. 在真实的业务场景中,部署的服务都是有状态的.且有数据需要持久化的:那么如何实现呢? 那么接下来学习一种更加 ...

  8. [1.6W字]浏览器跨域请求的原理, 以及解决方法(可以纯前端实现) #flight.Archives011

    Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...

  9. Slope Trick:解决一类凸代价函数DP优化

    [前言] 在补Codeforce的DP时遇到一个比较新颖的题,然后在知乎上刚好 hycc 桑也写了这道题的相关题解,这里是作为学习并引用博客的部分内容 这道题追根溯源发现2016年这个算法已经在API ...

  10. Linux搭建Snmp服务

    1:安装snmp yum install net-snmp net-snmp-devel net-snmp-libs net-snmp-utils php-snmp 上面的程序首先会校验需要升级的文件 ...