2018年牛客网NOIP赛前训练营游记

提高组(第一场)

中位数

#include<cstdio>
#include<cctype>
#include<climits>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=1e5+1;
int n,len,a[N],tmp[N],b[N];
inline bool check(const int &k) {
for(register int i=1;i<=n;i++) {
b[i]=b[i-1]+(a[i]<k?-1:1);
}
int min=INT_MAX;
for(register int i=len;i<=n;i++) {
min=std::min(min,b[i-len]);
if(b[i]-min>0) return true;
}
return false;
}
int main() {
n=getint(),len=getint();
for(register int i=1;i<=n;i++) {
tmp[i]=a[i]=getint();
}
std::sort(&tmp[1],&tmp[n]+1);
tmp[0]=std::unique(&tmp[1],&tmp[n]+1)-&tmp[1];
for(register int i=1;i<=n;i++) {
a[i]=std::lower_bound(&tmp[1],&tmp[tmp[0]]+1,a[i])-tmp;
}
int l=2,r=tmp[0];
while(l<=r) {
const int mid=(l+r)>>1;
if(check(mid)) {
l=mid+1;
} else {
r=mid-1;
}
}
printf("%d\n",tmp[l-1]);
return 0;
}

保护

#include<cstdio>
#include<cctype>
#include<vector>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=2e5+1,logN=20;
struct Node {
int k,id;
};
std::vector<int> e[N];
std::vector<Node> q[N];
inline void add_edge(const int &u,const int &v) {
e[u].push_back(v);
e[v].push_back(u);
}
int n,anc[N][logN],dep[N],dfn[N],id[N],ans[N];
inline int lg2(const float &x) {
return ((unsigned&)x>>23&255)-127;
}
void dfs(const int &x,const int &par) {
anc[x][0]=par;
dep[x]=dep[par]+1;
dfn[x]=++dfn[0];
id[dfn[x]]=x;
for(register int i=1;i<=lg2(dep[x]);i++) {
anc[x][i]=anc[anc[x][i-1]][i-1];
}
for(auto &y:e[x]) {
if(y!=par) dfs(y,x);
}
}
inline int lca(int x,int y) {
if(dep[x]<dep[y]) std::swap(x,y);
for(register int i=lg2(dep[x]-dep[y]);i>=0;i--) {
if(dep[anc[x][i]]>=dep[y]) x=anc[x][i];
}
for(register int i=lg2(dep[x]);i>=0;i--) {
if(anc[x][i]!=anc[y][i]) {
x=anc[x][i];
y=anc[y][i];
}
}
return x==y?x:anc[x][0];
}
class SegmentTree {
#define mid ((b+e)>>1)
private:
struct Node {
int val,left,right;
};
Node node[N*logN*2];
int sz;
int new_node() {
return ++sz;
}
public:
int root[N];
void insert(int &p,const int &b,const int &e,const int &x) {
if(!p) p=new_node();
node[p].val++;
if(b==e) return;
if(x<=mid) insert(node[p].left,b,mid,x);
if(x>mid) insert(node[p].right,mid+1,e,x);
}
void merge(int &p,int &q,const int &b,const int &e) {
if(!p) {
p=q;
return;
}
if(!q) return;
node[p].val+=node[q].val;
if(b==e) return;
merge(node[p].left,node[q].left,b,mid);
merge(node[p].right,node[q].right,mid+1,e);
}
int query(const int &p,const int &b,const int &e,const int &k) const {
if(node[p].val<k) return 0;
if(b==e) return id[b];
const int &tmp=node[node[p].left].val;
if(tmp>=k) return query(node[p].left,b,mid,k);
return query(node[p].right,mid+1,e,k-tmp);
}
#undef mid
};
SegmentTree t;
void dfs(const int &x) {
for(auto &y:e[x]) {
if(y==anc[x][0]) continue;
dfs(y);
t.merge(t.root[x],t.root[y],1,n);
}
for(auto &p:q[x]) {
const int &k=p.k,&id=p.id;
const int tmp=t.query(t.root[x],1,n,k);
ans[id]=(tmp&&dep[tmp]<dep[x])?dep[x]-dep[tmp]:0;
}
}
int main() {
n=getint();
const int m=getint();
for(register int i=1;i<n;i++) {
add_edge(getint(),getint());
}
dfs(1,0);
for(register int i=0;i<m;i++) {
const int u=getint(),v=getint(),p=lca(u,v);
t.insert(t.root[u],1,n,dfn[p]);
t.insert(t.root[v],1,n,dfn[p]);
}
const int c=getint();
for(register int i=0;i<c;i++) {
const int x=getint(),k=getint();
q[x].push_back((Node){k,i});
}
dfs(1);
for(register int i=0;i<c;i++) {
printf("%d\n",ans[i]);
}
return 0;
}

2018年牛客网NOIP赛前训练营游记的更多相关文章

  1. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

  2. 牛客网NOIP赛前集训营-提高组(第四场)B区间

    牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1  \dots   a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...

  3. 牛客网NOIP赛前集训营-提高组(第四场)B题 区间

    牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...

  4. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  5. 牛客网NOIP赛前集训营-提高组18/9/9 A-中位数

    链接:https://www.nowcoder.com/acm/contest/172/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  6. 牛客网NOIP赛前集训营-提高组(第二场)A 方差

    链接:https://www.nowcoder.com/acm/contest/173/A来源:牛客网 题目描述 一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中  表示序列的平 ...

  7. 牛客网NOIP赛前集训营-提高组(第八场)

    染色 链接:https://ac.nowcoder.com/acm/contest/176/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10 ...

  8. 牛客网NOIP赛前集训营 提高组(第七场)

    中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K, ...

  9. [牛客网NOIP赛前集训营-普及组(第二场)]D-合法括号序列

    链接:https://www.nowcoder.com/acm/contest/165/D来源:牛客网 合法括号序列 键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字 ...

随机推荐

  1. python---补充django中文报错(2),Django3.5出错

    今天是要Django3.5设置项目,结果出现中文报错,虽然之前分析过py2.7的报错原因,但是在py3之后reload不在使用,需要引入: from importlib import reload 但 ...

  2. angularJs实现级联操作

    angular实现级联非常的方便比起传统的jq和js来说,一般我们肯定是从后台获取一个list,然后生成一个下拉框,然后选中一个下拉框,得到id,再得到下一个list. 这些angular都给我做好了 ...

  3. js实现表单提交submit(),onsubmit

    通常表单的提交有两种方式,一是直接通过html的form提交,代码如下: <form action="" method="" id="forms ...

  4. WIN10文件无法自动刷新问题解决方法

    Window10系统有时候会遇到以下类似的问题 1.文件删除后,图标还在,无法自动刷新屏幕,按F5或右键菜单刷新后才消失 2.文件粘贴后,不显示,刷新后才显示 3.回收站清理后,文件图标仍显示有垃圾 ...

  5. golang的sort研究

    年前没钱,等发工资.就这么在公司耗着不敢回家,无聊看了下golang的sort源码 type Interface interface { // Len is the number of element ...

  6. Dream_Spark版本定制第一课

    从今天起,我们踏上了新的Spark学习旅途.我们的目标是要像Spark官方机构那样有能力去定制Spark. 一.  我们最开始将从Spark Streaming入手. 为何从Spark Streami ...

  7. Linux下JDK到底应该安装在哪儿?

    1 Linux 目录结构 即使这是个菜鸟级的问题,也经常难住老鸟.我就见过很资深的程序员把JDK不合适地安装到/home目录下.虽然不一定有最正确的安装位置,但一定有不适当的安装位置.为了确定我们到底 ...

  8. order by 字段自动填写脚本

    新版 firefox 中的 hackbar 没有 order by 字段填写, 所以就有了这个: =begin pod sql注入中自动输出order by 的位数 =end pod sub MAIN ...

  9. Linux下利用backtrace追踪函数调用堆栈以及定位段错误【转】

    转自:https://www.linuxidc.com/Linux/2012-11/73470p2.htm 通常情况系,程序发生段错误时系统会发送SIGSEGV信号给程序,缺省处理是退出函数.我们可以 ...

  10. Linux内核中的printf实现【转】

    转自:http://www.cnblogs.com/chenglei/archive/2009/08/06/1540702.html 从main.c中的printf开始读这个函数. 首先看printf ...