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, ...
随机推荐
- chrome 调试 ios h5
1,安装itunes, 否则无法识别iphone设备 2,开启调试模式 ,打开 iPhone 依次进入 设置 > Safari > 高级 > Web 检查 > 启用 3,下载 ...
- QLineEdit的信号函数
QLineEdit一共有6个信号函数,并不多,很好理解. ·void cursorPositionChanged( intold, intnew ) 当鼠标移动时发出此信号,old为先前的位置,new ...
- shell习题第27题:带选项的增删用户脚本
[题目要求] 写一个支持选项的增加或删除用户的shell脚本 #!/bin/bash ]; then echo "Wrong, use bash $0 --add username, or ...
- C语言之反汇编揭秘
title: 'C语言之反汇编揭秘' tags: 汇编与反汇编 categories: 汇编与反汇编 copyright: true abbrlink: 'b1c9' date: 2019-09-07 ...
- css 背景 background
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! background我们一般用到的的属性有: background-attachment:背景(图片)是否 ...
- PHP对程序员的要求更高
我这个文章标题可不是和大家开玩笑的哦 首先, 大家都知道, PHP也是一种编译型脚本语言, 和其他的预编译型语言不同, 它不是编译成中间代码, 然后发布.. 而是每次运行都需要编译.. 为此, 也 ...
- (二)手动配置第一个HelloWorld程序
上例的HelloWorld是由Android sutudio 自动生成的,现在我们手动来配置. 1. 重新创建工程 2. 创建空的Activity 生成的MainActivity.java 文件: p ...
- Sqlserver查询每组数据中最大的一条数据
select * from ( SELECT ROW_NUMBER() over (PARTITION By name order by val) as rowId,tb_test.* FROM tb ...
- 关闭google默认打开翻译提醒
关闭google默认打开翻译提醒 在header中添加以下代码: <meta name="google" content="notranslate" /& ...
- S2-029
前言 S2-029漏洞是由于Struts2的i18n.text标签中的name属性的值会经过两次Ognl表达式解析. 正文 假设有如下缺陷代码: jsp文件中使用Struts2的i18n标签获取请求中 ...