T1.中位数

二分答案x,原序列大于x的置为1,小于x的置为-1,判断是否存在长度大于m的区间和大于0(也就是大于x的数多于小于x的数),若有,则ans>=x,否则ans<x

#include<iostream>
#include<cstdio> using namespace std; inline int rd(){
int ret=,f=;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} const int MAXN=; int n,m; int a[MAXN],b[MAXN];
bool check(int x){
int mn=<<;
for(int i=;i<=n;i++)b[i]=a[i]<x?-:;
for(int i=;i<=n;i++){
if(i>=m) mn=min(mn,b[i-m]);
b[i]+=b[i-];
if(i>=m&&b[i]>mn)return ;
}
return ;
} int main(){
n=rd();m=rd();
int l=,r=<<,mid,ans;
for(int i=;i<=n;i++) a[i]=rd();
while(l<=r){
mid=l+r>>;
if(check(mid))ans=mid,l=mid+;
else r=mid-;
}
cout<<ans;
return ;
}

T2.数数字

数位DP还行,记忆化搜索实现

#include<iostream>
#include<cstdio>
#include<map> using namespace std; typedef long long ll; inline ll rd(){
ll ret=,f=;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} const int MAXN=; int a[MAXN];
ll l,r,l1,r1;
map<ll,ll> mp[MAXN]; ll dfs(int cur,ll sum,ll lim,ll xzero){
if(!cur){
if(xzero) sum=;
return (l1<=sum&&sum<=r1);
}
if(!xzero&&!lim&&mp[cur].count(sum))return mp[cur][sum];
ll ret=;
int mx=;
if(lim)mx=a[cur];
for(int i=;i<=mx;i++){
if(xzero)ret+=dfs(cur-,(i==)?1ll:i*1ll,lim&&(i==mx),xzero&&(i==));
else ret+=dfs(cur-,sum*1ll*i,lim&&(i==mx),xzero&&(i==));
}
if(!xzero&&!lim)mp[cur][sum]=ret;
return ret;
} ll solve(ll x){
int cnt=;
while(x){
a[++cnt]=x%;
x/=;
}
return dfs(cnt,,,);
} int main(){
l=rd();r=rd();l1=rd();r1=rd();
cout<<solve(r)-solve(l-);
return ;
}

T3.保护

ErkkiErkko的主席树想法

#include<iostream>
#include<cstdio>
#include<vector> using namespace std; inline int rd(){
int ret=,f=;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} const int MAXN=; int n,m,q;
vector<int> vec[MAXN]; int rt[MAXN]; struct Edge{
int next,to;
}e[MAXN<<];
int ecnt,head[MAXN];
inline void add(int x,int y){
e[++ecnt].next = head[x];
e[ecnt].to = y;
head[x] = ecnt;
} int fa[MAXN],hson[MAXN],siz[MAXN],dep[MAXN];
int top[MAXN],id[MAXN],tim=;
int ll[MAXN],rr[MAXN];
void dfs1(int x,int pre){
fa[x]=pre;siz[x]=;dep[x]=dep[pre]+;
ll[x]=++tim;id[tim]=x;
int mx=;
for(int i=head[x];i;i=e[i].next){
int v=e[i].to;
if(v==pre) continue;
dfs1(v,x);siz[x]+=siz[v];
if(siz[v]>mx){mx=siz[v];hson[x]=v;}
}
rr[x]=tim;
} void dfs2(int x,int tp){
top[x]=tp;
if(hson[x])dfs2(hson[x],tp);
for(int i=head[x];i;i=e[i].next){
int v=e[i].to;
if(v==fa[x]||v==hson[x]) continue;
dfs2(v,v);
}
}
int lca(int x,int y){
while(top[x]!=top[y]){
if(dep[top[x]]<dep[top[y]])swap(x,y);
x=fa[top[x]];
}
return dep[x]<=dep[y]?x:y;
}
int ch[MAXN*][],val[MAXN*],tot;
void update(int x,int &cur,int l,int r){
int f=cur;cur=++tot;val[cur]=val[f]+;
ch[cur][]=ch[f][];ch[cur][]=ch[f][];
if(l==r)return;
int mid=l+r>>;
if(x<=mid)update(x,ch[cur][],l,mid);
else update(x,ch[cur][],mid+,r);
}
int query(int cur,int l,int r,int f,int K){
if(val[f]-val[cur]<K) return -;
if(l==r)return l;
int mid=l+r>>;
if(K<=val[ch[f][]]-val[ch[cur][]])
return query(ch[cur][],l,mid,ch[f][],K);
return query(ch[cur][],mid+,r,ch[f][],K-(val[ch[f][]]-val[ch[cur][]]));
} int main(){
int x,y;
n=rd();m=rd();
for(int i=;i<n;i++){
x=rd();y=rd();add(x,y);add(y,x);
}
dfs1(,);dfs2(,);
for(int i=;i<=m;i++){
x=rd();y=rd();
int z=lca(x,y);
vec[x].push_back(dep[z]);
vec[y].push_back(dep[z]);
}
for(int i=;i<=n;i++){
rt[i]=rt[i-];
int up=vec[id[i]].size();
for(int j=;j<=up-;j++){
update(vec[id[i]][j],rt[i],,n);
}
}
q=rd();
int ans=;
for(int i=;i<=q;i++){
x=rd();y=rd();
if(!y)ans=dep[x]-dep[];
else{
int tmp=query(rt[ll[x]-],,n,rt[rr[x]],y);
if(tmp==-||tmp>=dep[x])ans=;
else ans=dep[x]-tmp;
}
printf("%d\n",ans);
}
}

NowCoder 9.9 模拟赛的更多相关文章

  1. 「NOWCODER」CSP-S模拟赛第3场

    「NOWCODER」CSP模拟赛第3场 T1 货物收集 题目 考场思路即正解 T2 货物分组 题目 考场思路 题解 60pts 算法:一维 DP 100pts 算法:一维 DP ?线段树 + 单调栈 ...

  2. nowcoder 提高组模拟赛 选择题 解题报告

    选择题 链接: https://www.nowcoder.com/acm/contest/178/B 来源:牛客网 题目描述 有一道选择题,有 \(a,b,c,d\) 四个选项. 现在有 \(n\) ...

  3. nowcoder 提高组模拟赛 最长路 解题报告

    最长路 链接: https://www.nowcoder.com/acm/contest/178/A 来源:牛客网 题目描述 有一张 \(n\) 个点 \(m\) 条边的有向图,每条边上都带有一个字符 ...

  4. nowcoder(牛客网)提高组模拟赛第一场 解题报告

    T1 中位数(二分) 这个题是一个二分(听说是上周atcoder beginner contest的D题???) 我们可以开一个数组b存a,sort然后二分b进行check(从后往前直接遍历check ...

  5. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  6. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  7. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  8. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  9. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

随机推荐

  1. .Net WebApi接口Swagger集成简单使用

    Swagger介绍 Swagger 是一款RESTFUL接口的.基于YAML.JSON语言的文档在线自动生成.代码自动生成的工具.而我最近做的项目用的是WebAPI,前后端完全分离,这时后端使用Swa ...

  2. python进阶10 MySQL补充 编码、别名、视图、数据库修改

    python进阶10 MySQL补充    编码.别名.视图.数据库修改 一.编码问题 #MySQL级别编码 #修改位置: /etc/mysql/mysql.conf.d/mysqld.cnf def ...

  3. Codeforces Round #566 (Div. 2) B. Plus from Picture

    链接: https://codeforces.com/contest/1182/problem/B 题意: You have a given picture with size w×h. Determ ...

  4. 在ubuntu 12.04上安装tomcat 7.40

    因为源上的版本问题,所以没有使用源上的自动安装包,老规矩,Tomcat 7.0.40 Core下载地址:http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/ ...

  5. P4869 罪犯分组

    思路: 明显的dp,虽然我想到了二进制模拟,想到了转移,但还是先看了题解,原来真是这样,,,,不是第三题吗? 用f[i]表示,对于前i个罪犯最少需要分几组. 对于每个状态用二进制表示,第i位上1,0表 ...

  6. 写TXT文件

    #region 写日志 private static void writelog(string strwrite) { string strPath = "d:/log.txt"; ...

  7. AJPFX关于JDK,JRE,JVM的区别与联系

    很多朋友可能跟我一样,对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天我们来整理下三者的关系. JDK : Java Development ToolKit(Java开发工具包) ...

  8. ajax请求拿到多条数据拼接显示在页面中

    首先我们拿到的了一坨Json数据 如下 然后通过ajax请求拿到数据 在ajax的success方法中处理和使用数据: 其中包括: 用eval处理这种数据 var outStr = eval('('+ ...

  9. ajax取到数据后如何拿到data.data中的属性值

    今天遇到的ajax取到数据后如何拿到data.data中的属性值的问题 比如拿到了数据 我要取出data中的name 题外话:当然取名最好别取什么奇怪的xiaobi

  10. SQL数据库基础三