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);
}
}

最新文章

  1. mysql索引
  2. J2EE之oracle、mysql存储过程调用
  3. [充电]Code Review
  4. 聊天界面之气泡文本cell(一)
  5. hdu 3074 Zjnu Stadium (带权并查集)
  6. WinSock异步IO模型之Select
  7. 两年后的随笔+this的思考
  8. AngularJS中$http服务的简单用法
  9. flex的三个属性:
  10. 基于Spring Boot的RESTful API实践(一)
  11. Spring Boot 2.X 如何添加拦截器?
  12. ios端的Safari浏览器中,输入框加入readonly之后,点击还能获取焦点的解决办法。
  13. jap篇 之 JSTL标签库
  14. awk命令总结
  15. dede网站安全要做的四件事
  16. 加NONCLUSTERED INDEX索引,在ON了之后还要INCLUDE
  17. 【python图像处理】图像的缩放、旋转与翻转
  18. Fedora 21 安装 Bumblebee with the NVIDIA proprietary drivers
  19. 使用gdbserver远程调试
  20. css3--之HSL颜色

热门文章

  1. git 基本操作——上传文件与项目分支管理
  2. jquery中的$(this)和this
  3. CC14:集合栈
  4. GYM 101933I(贪心、大整数)
  5. js解析url参数
  6. 基于vuecli3构建一个快速开发h5 APP的模板
  7. php时间戳存在8小时误差
  8. JavaScript 事件对象event
  9. Java 方法重载与引用数组类型
  10. 【Python图像特征的音乐序列生成】深度卷积网络,以及网络核心