CSP-S模拟68 题解
T1:
不难想到贪心,但是怎么贪,他有两个限制条件,所以不是很好搞,所以用一个类似与wqs二分的思路我可能在口胡,因为你肯定要把最小的给删掉,所以你限定一个x或y,然后在选出另一个限制,所以要同时维护删$k$个$x$最小和$y$最小,一个排序预处理,一个用堆维护即可。注意边界问题,思考实际意义。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+;
int a[N];
priority_queue<int> qx,qy;
struct node{
int x,y;
bool friend operator < (node a,node b){
return a.x==b.x?(a.y<b.y):(a.x<b.x);
}
}p[N];
signed main(){
int T;
scanf("%lld",&T);
while(T--){
int n,m;
scanf("%lld%lld",&n,&m);
priority_queue<int,vector<int>,greater<int> >q;
for(int i=;i<=n;++i){
scanf("%lld%lld",&p[i].x,&p[i].y);
}
sort(p+,p+n+);
for(int i=m+;i<=n;++i) q.push(p[i].y);
int ans=p[m+].x*q.top();
for(int i=m;i>=;--i){
q.pop();q.push(p[i].y);
ans=max(ans,p[i].x*q.top());
}
printf("%lld\n",ans);
}
}
d
T2:
考试时啥都没想到,连那个最小联通块都没分析出来是什么。通过手玩可以发现他所说的最小联通块就是所有点的LCA到每个节点的链,然后对于每一个询问值,只要查他的前趋后继即可,思路类似于平衡树那道题,宠物收养所,然后树上每条链其实就是树上的一段区间,用主席树维护即可,具体方法为查询问的值在区间的排名$rk$(准确来说是小于等于它的数的个数),然后前趋排名为$rk$,后继为$rk+1$,在查区间第k大即可,注意特判没有前趋或后继的情况。
特别注意在线不要只把值赋给LCA,$p[1]$也要改。
调了一下午 kuku
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
struct Chairman_Tree{
int l,r,size;
}tr[N*];
int first[N],nex[N<<],to[N<<],tot,fr[N<<];
void add(int a,int b){
to[++tot]=b,nex[tot]=first[a],first[a]=tot,fr[tot]=a;
}
int fa[N][],d[N],root[N*],p[N*],a[N];
void bfs(){
queue<int> q;
q.push();
d[]=;
while(q.size()){
int x=q.front();q.pop();
for(int i=first[x];i;i=nex[i]){
int y=to[i];
if(d[y]) continue;
d[y]=d[x]+;
fa[y][]=x;
for(int j=;j<=;++j) fa[y][j]=fa[fa[y][j-]][j-];
q.push(y);
}
}
}
int LCA(int x,int y){
if(d[x]>d[y]) swap(x,y);
for(int i=;i>=;--i) if(d[fa[y][i]]>=d[x]) y=fa[y][i];
if(x==y) return x;
for(int i=;i>=;--i) if(fa[y][i]!=fa[x][i]) y=fa[y][i],x=fa[x][i];
return fa[x][];
}
int cnt;
void insert(int &x,int v,int l,int r,int pos){
x=++cnt;
tr[x]=tr[v];
tr[x].size++;
if(l==r) return ;
int mid=(l+r)>>;
if(pos<=mid) insert(tr[x].l,tr[v].l,l,mid,pos);
else insert(tr[x].r,tr[v].r,mid+,r,pos);
}
int maxn=;
void dfs(int x){//cout<<"x=="<<x<<endl;
// cout<<x<<" "<<fa[x][0]<<" "<<a[x]<<endl;
insert(root[x],root[fa[x][]],,maxn,a[x]);
for(int i=first[x];i;i=nex[i]){
int y=to[i];
if(y==fa[x][]) continue;
dfs(y);
}
}
int query(int u,int v,int l,int r,int val){
if(r<=val) return tr[v].size-tr[u].size;
int mid=(l+r)>>;
int als=tr[tr[v].l].size-tr[tr[u].l].size;
if(val<=mid) return query(tr[u].l,tr[v].l,l,mid,val);
else return als+query(tr[u].r,tr[v].r,mid+,r,val);
}
int kth(int u,int v,int l,int r,int rk){
if(l==r) return l;
int mid=(l+r)>>;
int als=tr[tr[v].l].size-tr[tr[u].l].size;
if(rk<=als) return kth(tr[u].l,tr[v].l,l,mid,rk);
else return kth(tr[u].r,tr[v].r,mid+,r,rk-als);
} int find(int x,int fa,int val){
int tmp=query(root[fa],root[x],,maxn,val);
int fr=tmp,aft=tmp+;
// cout<<"tmp=="<<tmp<<endl;
int frv=0x7fffffff,aftv=0x7fffffff;
// if(aft>d[x]-d[fa]) cout<<"HHH"<<endl;
int res=0x7fffffff;
if(fr>) frv=kth(root[fa],root[x],,maxn,fr),res=min(res,abs(frv-val));
if(aft<=tr[root[x]].size-tr[root[fa]].size) aftv=kth(root[fa],root[x],,maxn,aft),res=min(res,abs(aftv-val));
// cout<<"x=="<<x<<" fa=="<<fa<<" val=="<<val<<endl;
// cout<<"fr=="<<fr<<" aft=="<<aft<<endl;
// cout<<"frv=="<<frv<<" aftv=="<<aftv<<endl;
return res;
} int main(){
int n,q,type;
scanf("%d%d%d",&n,&q,&type);
for(int i=;i<=n;++i) {scanf("%d",&a[i]);maxn=max(maxn,a[i]);}
for(int i=;i<n;++i){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
bfs();
// for(int i=1;i<=tot;++i) cout<<fr[i]<<" "<<to[i]<<endl;
dfs();
int lastans=;
for(int i=;i<=q;++i){
int rvalue,k;
scanf("%d%d",&rvalue,&k);
scanf("%d",&p[]);
int lca=p[]=(p[]-+lastans*type)%n+;
for(int j=;j<=k;++j){
scanf("%d",&p[j]);
p[j]=(p[j]-+lastans*type)%n+;
lca=LCA(lca,p[j]);
}
// cout<<"Lca=="<<lca<<endl;
int ans=0x7fffffff;
for(int j=;j<=k;++j) ans=min(ans,find(p[j],fa[lca][],rvalue));
lastans=ans;
printf("%d\n",ans);
}
}
/*
3 1 0
18 99 59
1 2
2 3
15 3 2 2 3
*/
e
T3:不会,鸽了
CSP-S模拟68 题解的更多相关文章
- [CQOI2012]模拟工厂 题解(搜索+贪心)
[CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- HGOI NOIP模拟4 题解
NOIP国庆模拟赛Day5 题解 T1 马里奥 题目描述 马里奥将要参加 NOIP 了,他现在在一片大陆上,这个大陆上有着许多浮空岛,并且其中一座浮空岛上有一个传送门,马里奥想要到达传送门从而前往 N ...
- 10.8 wtx模拟题题解
填坑 orz w_x_c_q w_x_c_q的模拟赛(150pts,炸了) money 题目背景: 王小呆又陷入自己的梦里.(活在梦里...) 题目描述: 王小呆是一个有梦想的小菜鸡,那就是赚好多好多 ...
- [NOIP模拟13]题解
A.矩阵游戏 其实挺水的? 考场上根本没有管出题人的疯狂暗示(诶这出题人有毛病吧这么简单的东西写一大堆柿子),而且推公式能力近乎没有,所以死掉了. 很显然乘法有交换率结合率所以操作顺序对最终结果没什么 ...
- 「题解」NOIP模拟测试题解乱写II(36)
毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...
- 【洛谷】xht模拟赛 题解
前言 大家期待已久并没有的题解终于来啦~ 这次的T1和HAOI2016撞题了...深表歉意...表示自己真的不知情... 天下的水题总是水得相似,神题各有各的神法.--<安娜·卡列妮娜> ...
- 10.9 guz模拟题题解
感谢@guz 顾z的题题解 考试共三道题,其中 第一题help共10个测试点,时间限制为 1000ms,空间限制为 256MB. 第二题escape共20个测试点,时间限制为1000ms2000ms, ...
随机推荐
- “Using 声明”在 C# 7.3 中不可用。请使用 8.0 或更高的语言版本。
Core3.0升级至3.1时候报错:“Using 声明”在 C# 7.3 中不可用.请使用 8.0 或更高的语言版本. 参照微软文档:https://docs.microsoft.com/zh-cn/ ...
- 调整统计信息JOB采样时间
一.需求说明 Oracle数据库中存在定时JOB,自动执行收集统计信息的程序.但是对于7*24小时系统来说,Oracle配置的定时收集时间不太合理,需要人为调整.本篇博客就是基于这种需求,调整JOB采 ...
- C# 延迟初始化 Lazy<T>
概念:延时初始化重点是延时,用时加载,意思是对象在使用的时候创建而不是在实例化的的时候才创建. 延时加载主要应用的场景: 数据层(ADO.NET或Entity Framework等ORM,Java ...
- Linux查看系统及版本信息
1.查看操作系统版本cat /proc/version 2.查看系统发行版cat /etc/issue 或cat /etc/redhat-release 3.查看系统内核信息uname -a
- react请求接口数据是在componentDidMount 还是componentWillMount周期好
如果你要获取外部数据并加载到组件上,只能在组件"已经"挂载到真实的网页上才能作这事情,其它情况你是加载不到组件的.componentDidMount方法中的代码,是在组件已经完全挂 ...
- bootstrap下拉框保持打开
$(".dropdown-menu li").on("click", function (e) { e.stopPropagation(); }); 停止传播事 ...
- Marketing Cloud的contact merge机制
Marketing Cloud的contact支持多种多样的数据源,如下图所示: SAP Hybris Commerce SAP ERP SAP Cloud for Customer SAP Gigy ...
- Android Studio 证书问题
彻底解决unable to find valid certification path to requested target 转载: https://www.cnblogs.com/Anderson ...
- 跟着minium官网介绍学习minium-----(三)
注意:程序运行时在微信开发者工具当前页面为主,而不是每次运行都是从home页面开始 一 获取单个元素 get_element():在当前页面查询控件, 如果匹配到多个结果, 则返回第一个匹配到的结果 ...
- idou老师教你学Istio 20 : Istio全景监控与拓扑
根据Istio官方报告,Observe(可观察性)为其重要特性.Istio提供非侵入式的自动监控,记录应用内所有的服务. 我们知道在Istio的架构中,Mixer是管理和收集遥测信息的组件.每一次当请 ...