牛客网NOIP赛前集训营-提高组(第一场)
牛客的这场比赛感觉真心不错!!
打得还是很过瘾的。水平也比较适合。
T1:中位数:
题目描述
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
const int N=+;
const int inf=0x3f3f3f3f;
int n,len;
int a[N],b[N],sum[N];
int l,r;
int ans;
int main(){
scanf("%d%d",&n,&len);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
r=max(r,a[i]);
}
l=;
while(l<=r){
int mid=(l+r)>>;
for(int i=;i<=n;i++){
if(a[i]>=mid) b[i]=;
if(a[i]<mid) b[i]=-;
sum[i]=sum[i-]+b[i];
}
int mi=;
bool fl=false;
for(int i=len;i<=n;i++){
if(sum[i]-mi>) {
fl=true;break;
}
mi=min(mi,sum[i-len+]);
}
if(fl) ans=mid,l=mid+;
else r=mid-;
}
printf("%d",ans);
return ;
}
中位数
题目描述
100%: 0<=L,R,L1,R1 <= 10^18, L <= R, L1 <= R1
题解:
一眼数位dp了。f(x)怎么处理?
代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=;
const int M=;
const int mod=;
typedef long long ll;
ll f[][][M][];//gun dong
ll num[M],cnt;
ll L,R,L1,R1;
ll shu[N],tot;
struct ha{
ll val[mod+],tot;
int id[mod+];
int nxt[mod+],hd[mod+];
void ins(ll x,int d){
int cur=x%mod;
++tot;nxt[tot]=hd[cur];
id[tot]=d;
val[tot]=x;
hd[cur]=tot;
}
int query(ll x){
int cur=x%mod;
for(int i=hd[cur];i;i=nxt[i]){
if(val[i]==x) return id[i];
}
return ;
}
}HA;
ll c2[],c3[],c5[],c7[];
ll wrk(){
memset(f,,sizeof f);
int tmp=;
f[tmp][][][]=;
for(int i=tot;i>=;i--){
//cout<<" iii "<<i<<" ------------------- "<<shu[i]<<endl;
tmp^=;
memset(f[tmp],,sizeof f[tmp]);
for(int j=;j<=cnt;j++){
for(int k=;k<=;k++){
if(!f[!tmp][][j][]&&!f[!tmp][][j][]) continue; int to=HA.query(num[j]*k);
if(!to) continue;
if(k<shu[i]){
//if(f[!tmp][0][j][1]||f[!tmp][1][j][1]) {
f[tmp][][to][]+=f[!tmp][][j][]+f[!tmp][][j][];
//}
}
else if(k==shu[i]){
//if(f[!tmp][1][j][1]) {
//int to=
//}
f[tmp][][to][]+=f[!tmp][][j][];
f[tmp][][to][]+=f[!tmp][][j][];
}
else{
f[tmp][][to][]+=f[!tmp][][j][];
}
}
} if(i!=tot){
for(int j=;j<=;j++){
f[tmp][][j+][]+=f[!tmp][][][];
}
}
else{
for(int j=;j<=;j++){
if(j<shu[i]){
f[tmp][][j+][]+=f[!tmp][][][];
}
else if(j==shu[i]){
f[tmp][][j+][]+=f[!tmp][][][];
}
else break;
}
}
f[tmp][][][]+=f[!tmp][][][]; /*for(int j=1;j<=20;j++){
cout<<j<<" "<<num[j]<<" : "<<f[tmp][0][j][0]<<" "<<f[tmp][0][j][1]<<" "<<f[tmp][1][j][0]<<" "<<f[tmp][1][j][1]<<endl;
}*/
}
ll ret=;
ll le=;
while(num[le]<L1) le++;
while(num[le]<=R1) ret+=f[tmp][][le][]+f[tmp][][le][],le++;
return ret;
}
int main()
{
scanf("%lld%lld%lld%lld",&L,&R,&L1,&R1);
c2[]=;for(int i=;i<=;i++) c2[i]=c2[i-]*;
c3[]=;for(int i=;i<=;i++) c3[i]=c3[i-]*;
c5[]=;for(int i=;i<=;i++) c5[i]=c5[i-]*;
c7[]=;for(int i=;i<=;i++) c7[i]=c7[i-]*; for(int i=;i<=;i++){
for(int j=;j<=;j++){
for(int k=;k<=;k++){
for(int l=;l<=;l++){
int re=-l-k;
re-=((j+)/);
re-=((i+)/);
if(re>=) {
++cnt;
ll now=c2[i]*c3[j]*c5[k]*c7[l];
num[cnt]=now;
}
}
}
}
}
num[++cnt]=;
sort(num+,num+cnt+);
cnt=unique(num+,num+cnt+)-num-; //cout<<" Cnt "<<cnt<<endl;
//for(int i=1;i<=40;i++) cout<<num[i]<<" ";
//cout<<endl;
//cout<<" las "<<num[cnt]<<endl; for(int i=;i<=cnt;i++){
HA.ins(num[i],i);
}
ll sub=;
ll ansl=;
ll ad=;
if(R==(ll)1e18) {
R--;
if(L1==) ad++;
}
//cout<<R<<endl;
if(L==){
ansl=;
if(L1==) ad++;
}
else if(L==){
ansl=;
}
else{//only zero ??
L--;
tot=;
while(L){
shu[++tot]=L%;L/=;
}
ansl+=wrk();
} //cout<<" ansl "<<ansl<<endl; tot=;
while(R){
shu[++tot]=R%;
R/=;
}
ll ansr=wrk(); //cout<<" ansr "<<ansr<<endl; printf("%lld",ansr-ansl+ad);
return ; //don't forget to sub sub
}
数数字
T3:
题目描述
100%: n,m,q <= 200000
#include<bits/stdc++.h>
#define mid ((l+r)>>1)
using namespace std;
const int N=+;
int n,m,q;
struct node{
int nxt,to; }e[*N];
int hd[N],cnt;
void add(int x,int y){
e[++cnt].nxt=hd[x];
e[cnt].to=y;
hd[x]=cnt;
}
int fa[N][];
int dep[N];
int dfn[N];
int dfn2[N],df;
int fdfn[N];
vector<int>mem[N];
void dfs(int x,int d){
dfn[x]=++df;
dep[x]=d;
fdfn[df]=x;
for(int i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa[x][]) continue;
fa[y][]=x;
dfs(y,d+);
}
dfn2[x]=df;
}
int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y);
for(int j=;j>=;j--){
if(dep[fa[x][j]]>=dep[y]) x=fa[x][j];
}
if(x==y) return x;
for(int j=;j>=;j--){
if(fa[x][j]!=fa[y][j]){
x=fa[x][j],y=fa[y][j];
}
}
return fa[x][];
}
struct tr{
int ls,rs;
int sum;
}t[N*];
int tot;
int rt[N];
int now;
void upda(int &x,int y,int l,int r,int c){
x=++tot;
t[x].ls=t[y].ls;
t[x].rs=t[y].rs;
t[x].sum=t[y].sum+;
if(l==r){
return;
}
if(c<=mid) upda(t[x].ls,t[y].ls,l,mid,c);
else upda(t[x].rs,t[y].rs,mid+,r,c);
}
int query(int x,int y,int l,int r,int k){
//cout<<" kth "<<k<<endl;
///cout<<" x "<<x<<" ls "<<t[x].ls<<" rs "<<t[x].rs<<endl;
//cout<<" y "<<y<<" ls "<<t[y].ls<<" rs "<<t[y].rs<<endl<<endl;
if(l==r){
if(t[x].sum<k) return ;
return l;
}
int u=t[t[x].ls].sum-t[t[y].ls].sum;
//cout<<u<<" "<<endl;
if(u>=k){
return query(t[x].ls,t[y].ls,l,mid,k);
}
else{
k-=u;
return query(t[x].rs,t[y].rs,mid+,r,k);
}
}
int main()
{
scanf("%d%d",&n,&m);
int x,y;
for(int i=;i<=n-;i++){
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
dep[]=-;
dfs(,); /*cout<<" on the tree"<<endl;
for(int i=1;i<=n;i++){
cout<<i<<" : "<<fa[i][0]<<" "<<dep[i]<<" "<<dfn[i]<<" "<<dfn2[i]<<endl;
}*/ for(int j=;j<=;j++){
for(int i=;i<=n;i++){
fa[i][j]=fa[fa[i][j-]][j-];
}
}
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
int anc=lca(x,y);
// cout<<" anc "<<anc<<endl;
mem[dfn[x]].push_back(dep[anc]);
mem[dfn[y]].push_back(dep[anc]);
}
rt[]=++tot;
for(int i=;i<=n;i++){
//cout<<" updating "<<i<<" ------------------ "<<endl;
rt[i]=rt[i-];
for(int j=;j<mem[i].size();j++){
upda(rt[i],rt[i],,n,mem[i][j]);
}
//cout<<" after "<<tot<<endl;
}
///for(int i=1;i<=tot;i++){
// cout<<" id "<<i<<" : "<<t[i].ls<<" "<<t[i].rs<<" "<<t[i].sum<<endl;
//}
scanf("%d",&q);
int k;
while(q--){
scanf("%d%d",&x,&k);
int ans=query(rt[dfn2[x]],rt[dfn[x]-],,n,k);
//cout<<" ans "<<ans<<endl;
if(ans==||ans>=dep[x]) printf("%d\n",);
else printf("%d\n",dep[x]-ans);
}
return ;
}
保护
牛客网NOIP赛前集训营-提高组(第一场)的更多相关文章
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B区间
牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1 \dots a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B题 区间
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- 牛客网NOIP赛前集训营-提高组18/9/9 A-中位数
链接:https://www.nowcoder.com/acm/contest/172/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 牛客网NOIP赛前集训营-提高组(第二场)A 方差
链接:https://www.nowcoder.com/acm/contest/173/A来源:牛客网 题目描述 一个长度为 m 的序列 b[1...m] ,我们定义它的方差为 ,其中 表示序列的平 ...
- 牛客网NOIP赛前集训营-提高组(第八场)
染色 链接:https://ac.nowcoder.com/acm/contest/176/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10 ...
- 牛客网NOIP赛前集训营 提高组(第七场)
中国式家长 2 链接:https://www.nowcoder.com/acm/contest/179/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K, ...
- [牛客网NOIP赛前集训营-提高组(第一场)]C.保护
链接:https://www.nowcoder.com/acm/contest/172/C来源:牛客网 题目描述 C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为 ...
随机推荐
- 【360图书馆】插入U盘自动攻击:BadUSB原理与实现
插入U盘自动攻击:BadUSB原理与实现 漏洞背景 “BadUSB”是今年计算机安全领域的热门话题之一,该漏洞由Karsten Nohl和Jakob Lell共同发现,并在今年的Black ...
- CLOUD设置过滤方案不共享
1.打开BOS,找到应用框架-动态表单-过滤方案另存 2.找到共享给他人,把可见性全部去掉
- (二)Wireshark的实用表格
主要内容: 1.了解端点概念,学习如何在Wireshark中查询端点信息 2.学习利用端点窗口与会话窗口来分析数据包的特点 3.学会Wireshark的协议分层统计窗口的用法 一.端点概念 和数学里的 ...
- web项目中的监听器,过滤器以及自定义servlet的执行顺序
可以看到web容器一启动就会实例化监听器的contextInitialized(ServletContextEvent event)方法,然后是过滤器的init()方法,最后在用户访问web应用的 时 ...
- hadoop分布式系统架构详解
hadoop 简单来说就是用 java写的分布式 ,处理大数据的框架,主要思想是 “分组合并” 思想. 分组:比如 有一个大型数据,那么他就会将这个数据按照算法分成多份,每份存储在 从属主机上,并且在 ...
- java学习之—数组的曾删改查
/** * 数组的曾删改查 * Create by Administrator * 2018/6/8 0008 * 上午 9:54 **/ public class HighArray { priva ...
- Nginx 热部署最版本
L10 进入nginx里的sbin目录 拷贝原先的做备份 cp nginx nginx.old 然后将已经编译好的nginx二进制文件复制到sbin目录下并覆盖原有的二进制文件 kill -USR2 ...
- 【数学建模】day05-微分方程建模
很多问题,归结起来是微分方程(组)求解的问题.比如:为什么使用三级火箭发射卫星.阻滞增长人口模型的建立…… MATLAB提供了良好的微分方程求解方案. 一.MATLAB求微分方程的符号解 matlab ...
- hadoop安装要领
1.安装JDK tar -zxvf jdk-7u75-linux-i586.tar.gz -C /root/training/ vi ~/.bash_profile JAVA_HOME=/root/t ...
- CODEFORCES掉RATING记 #5
比赛:Codeforces Round #429 (Div. 2) 时间:2017.8.1晚 这次感觉状态不好,就去打div2了 A:有\(26\)种颜色的气球,每种的数量不一样,你要把这 ...