考试总结:这次考试题,有好多部分分,导致了我在考试过程中一心想拿到这些部分分,对于正解没有留出时间进行思考,这是一个教训,在以后的考试中我一定要留出足够的思考时间,不要被部分分限制。还有,我的部分分也没有拿满,犯了一些zz的错误,有因为数组开小的,还有没有控制好优先级的(对于特殊性质的特殊解法),还有自己没有验证正确性的一些暴力优化,还遇到了一个因为我懒,没去学的知识点(痛失20分)。总体来说,这次考试我暴露出的问题有许多,在以后的考试中我会进行改正。

T1 d

思路:很显然,我们要求矩形并起来的最大值,就要去掉最多的 x,y,最小的矩形,那么我们可以将 x,预处理排序v,同时用一个优先队列维护 y ,这样我们刚开始假设去掉 m 个 x,接着我们不断将 x 放回,并去掉 y 更新答案即可。

代码如下:

AC_Code

#include<bits/stdc++.h>
#define int long long
#define re register int
#define lc rt<<1
#define rc rt<<1|1
#define mid ((l+r)>>1)
#define re register int
#define ii inline int
#define iv inline void
using namespace std;
const int N=1e5+10;
const int INF=1e9+10;
int t,n,m,ans;
struct C1
{
int a,pos;
}u1[N];
struct C2
{
int b,pos;
friend bool operator < (C2 x,C2 y)
{
return x.b>y.b;
}
}u2[N];
priority_queue<C2> q;
bool vis[N],v2[N];
ii my1(C1 a,C1 b)
{
return a.a<b.a;
}
ii read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=0;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return (f)?x:(-x);
}
signed main()
{
t=read();
long long minn_a,minn_b;
if(t==0)
return 0;
while(t--)
{
n=read();
m=read();
ans=0;
minn_a=INF;
minn_b=INF;
for(re i=1;i<=n;i++)
{
u1[i].a=read();
u2[i].b=read();
u1[i].pos=u2[i].pos=i;
}
sort(u1+1,u1+n+1,my1);
memset(vis,0,sizeof(vis));
memset(v2,0,sizeof(v2));
while(!q.empty())
q.pop();
for(re i=1;i<=m;i++)
vis[u1[i].pos]=1;
for(re i=m+1;i<=n;i++)
q.push((C2){u2[u1[i].pos].b,u1[i].pos});
ans=u1[m+1].a*q.top().b;
for(re i=m;i;i--)
{
vis[u1[i].pos]=0;
minn_a=u1[i].a;
q.push((C2){u2[u1[i].pos].b,u1[i].pos});
v2[q.top().pos]=1;
q.pop();
minn_b=q.top().b;
if(v2[u1[i].pos])
continue;
ans=max(ans,minn_a*minn_b);
}
printf("%lld\n",ans);
}
return 0;
}


T2 e

思路:很显然,我们需要一种可以维护一条链上信息的数据结构,主席树,那么我们只需要求出所有点的lca,然后分别以这两个点对应的树求出 r 对应的rank,那么我们再通过查询树中 排名为 (rank-1),(rank),(rank+1)的数值进行计算,最后取min即可,注意,在查询的时候有一些细节,当 rank,rank-1,rank+1,<=0或 >sum[lca]-sum[p]的时候我们就不能进行查询,具体实现见代码:

(因为我们要找的是小于r的最大值和大于r的最小值,所以还有另一种打法 hzoi-fengwu

AC_Code

#include<bits/stdc++.h>
#define int long long
#define re register int
#define ii inline int
#define iv inline void
#define mid ((l+r)>>1)
using namespace std;
const int N=5e5+10;
const int INF=1e9+10;
vector<int> v[N];
int n,q,type,tot,timi,r,ans,k,cnt,jk;
int a[N],to[N<<1],next[N<<1],head[N],cun_k[N],lsh[N<<4],rt[N],cun_r[N];
int deep[N],son[N],size[N],num[N],zh[N],fa[N],top[N];
struct CUN
{
int ls,rs,sum;
}use[N*80];
ii read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=0;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return (f)?x:(-x);
}
struct Segment_Tree
{
ii insert(int now,int l,int r,int zh)
{
int p=++jk;
use[p]=use[now];
if(l==r)
{
use[p].sum++;
return p;
}
if(mid>=zh)
use[p].ls=insert(use[now].ls,l,mid,zh);
else
use[p].rs=insert(use[now].rs,mid+1,r,zh);
use[p].sum=use[use[p].ls].sum+use[use[p].rs].sum;
return p;
}
ii gett(int x,int y)
{
int fx=top[x],fy=top[y];
while(fx!=fy)
{
if(deep[fx]<deep[fy])
{
swap(fx,fy);
swap(x,y);
}
x=fa[fx];
fx=top[x];
}
return (deep[x]<deep[y])?x:y;
}
ii query_rank(int last,int now,int l,int r,int zh)
{
if(l==r)
return 0;
int sum=use[use[now].ls].sum-use[use[last].ls].sum;
if(mid>=zh) return query_rank(use[last].ls,use[now].ls,l,mid,zh);
return sum+query_rank(use[last].rs,use[now].rs,mid+1,r,zh);
}
ii query(int last,int now,int l,int r,int rk)
{
if(l==r)
return l;
int sum=use[use[now].ls].sum-use[use[last].ls].sum;
if(sum>=rk) return query(use[last].ls,use[now].ls,l,mid,rk);
return query(use[last].rs,use[now].rs,mid+1,r,rk-sum);
}
}T;
iv add(int x,int y)
{
to[++tot]=y;
next[tot]=head[x];
head[x]=tot;
}
iv dfs(int st,int f)
{
num[st]=++timi;
zh[timi]=a[st];
size[st]=1;
deep[st]=deep[f]+1;
for(re i=head[st];i;i=next[i])
{
int p=to[i];
if(p==f)
continue;
fa[p]=st;
dfs(p,st);
size[st]+=size[p];
son[st]=(size[son[st]]>size[p])?son[st]:p;
}
}
iv dfs2(int st,int t)
{
top[st]=t;
if(!son[st])
return;
dfs2(son[st],t);
for(re i=head[st];i;i=next[i])
{
int p=to[i];
if(p==fa[st]||p==son[st])
continue;
dfs2(p,p);
}
}
iv dfs3(int st,int f)
{
rt[st]=T.insert(rt[f],1,cnt,a[st]);
for(re i=head[st];i;i=next[i])
{
int p=to[i];
if(p==f)
continue;
dfs3(p,st);
}
}
signed main()
{
n=read();
q=read();
type=read();
for(re i=1;i<=n;i++)
{
a[i]=read();
lsh[++cnt]=a[i];
}
for(re i=1,u2,v2;i<n;i++)
{
u2=read();
v2=read();
add(u2,v2);
add(v2,u2);
}
dfs(1,0);
dfs2(1,1);
if(q==0)
return 0;
for(re i=1;i<=q;i++)
{
cun_r[i]=read();
lsh[++cnt]=cun_r[i];
cun_k[i]=read();
for(re j=1;j<=cun_k[i];j++)
v[i].push_back(read());
}
sort(lsh+1,lsh+cnt+1);
cnt=unique(lsh+1,lsh+cnt+1)-lsh-1;
for(re i=1;i<=n;i++)
a[i]=lower_bound(lsh+1,lsh+cnt+1,a[i])-lsh;
for(re i=1;i<=q;i++)
cun_r[i]=lower_bound(lsh+1,lsh+cnt+1,cun_r[i])-lsh;
dfs3(1,0);
for(re i=1;i<=q;i++)
{
int lca,rk;
v[i][0]=(v[i][0]-1+ans*type)%n+1;
lca=v[i][0];
for(re j=1;j<v[i].size();j++)
{
v[i][j]=(v[i][j]-1+ans*type)%n+1;
lca=T.gett(lca,v[i][j]);
}
lca=fa[lca];
ans=INF;
for(re j=0;j<v[i].size();j++)
{
rk=T.query_rank(rt[lca],rt[v[i][j]],1,cnt,cun_r[i]);
if(rk>=(use[rt[v[i][j]]].sum-use[rt[lca]].sum))
ans=min(ans,abs(lsh[T.query(rt[lca],rt[v[i][j]],1,cnt,rk)]-lsh[cun_r[i]]);
else
ans=min(ans,abs(lsh[T.query(rt[lca],rt[v[i][j]],1,cnt,rk+1)]-lsh[cun_r[i];
if(rk-1<=1)
ans=min(ans,abs(lsh[T.query(rt[lca],rt[v[i][j]],1,cnt,1)]-lsh[cun_r[i]]));
else
ans=min(ans,abs(lsh[T.query(rt[lca],rt[v[i][j]],1,cnt,rk-1)]-lsh[cun_r[i];
if(rk>=1&&rk<=use[rt[v[i][j]]].sum-use[rt[lca]].sum)
ans=min(ans,abs(lsh[T.query(rt[lca],rt[v[i][j]],1,cnt,rk)]-lsh[cun_r[i]]);
}
printf("%lld\n",ans);
} return 0;
}


T3 f

补坑:

树状数组求逆序对,我们对于一个序列倒序枚举,显然,根据逆序对的定义,我们查询的小于当前数的权值的前缀和即为当前点的逆序对个数,注意,我们的树状数组建立在总序列的值域的基础上

    for(re i=1;i<=n;i++)
{
a[i]=read()+1;
maxx=max(a[i],maxx);
}
for(re i=n;i;i--)
{
ans+=ask(a[i]-1);
add(a[i],1);
}
cout<<ans<<endl;

noip模拟测试22的更多相关文章

  1. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  2. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  3. 2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色

    2019.8.3 [HZOI]NOIP模拟测试12 B. 数颜色 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 数据结构学傻的做法: 对每种颜色开动态开点线段树直接维 ...

  4. 2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci)

    2019.8.3 [HZOI]NOIP模拟测试12 A. 斐波那契(fibonacci) 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 找规律 找两个节点的lca,需 ...

  5. NOIP模拟测试17&18

    NOIP模拟测试17&18 17-T1 给定一个序列,选取其中一个闭区间,使得其中每个元素可以在重新排列后成为一个等比数列的子序列,问区间最长是? 特判比值为1的情况,预处理比值2~1000的 ...

  6. NOIP模拟测试1(2017081501)

    好,今天是cgg第一次举行模拟测试,希望各位支持. 时间限制:2小时 题目链接: 题目一:水得都没名字了 题目二:车站 题目三:选数 不要觉得2小时太少,我的题目很良心,都很简单. 答案可以在模拟测试 ...

  7. 「题解」NOIP模拟测试题解乱写I(29-31)

    NOIP模拟29(B) T1爬山 简单题,赛时找到了$O(1)$查询的规律于是切了. 从倍增LCA那里借鉴了一点东西:先将a.b抬到同一高度,然后再一起往上爬.所用的步数$×2$就是了. 抬升到同一高 ...

  8. 2019.8.14 NOIP模拟测试21 反思总结

    模拟测试20的还没改完先咕着 各种细节问题=错失190pts T1大约三分钟搞出了式子,迅速码完,T2写了一半的时候怕最后被卡评测滚去交了,然后右端点没有初始化为n…但是这样还有80pts,而我后来还 ...

  9. 2019.8.9 NOIP模拟测试15 反思总结

    日常爆炸,考得一次比一次差XD 可能还是被身体拖慢了学习的进度吧,虽然按理来说没有影响.大家听的我也听过,大家学的我也没有缺勤多少次. 那么果然还是能力问题吗……? 虽然不愿意承认,但显然就是这样.对 ...

随机推荐

  1. 冷饭新炒 | 深入Quartz核心运行机制

    目录 Quartz的核心组件 JobDetail Trigger 为什么JobDetail和Trigger是一对多的关系 常见的Tigger类型 怎么排除掉一些日期不触发 Scheduler List ...

  2. GitHub Desktop的使用,创建项目、上传文件,设置忽略文件

    下载登陆之后 新建项目File--第一个New repository 然后输入项目名称,选择项目文件夹,最后点Creata repository创建项目 这只是在本地建了项目. 项目文件夹中有其他文件 ...

  3. kube-controller-manager源码分析-PV controller分析

    kubernetes ceph-csi分析目录导航 概述 kube-controller-manager组件中,有两个controller与存储相关,分别是PV controller与AD contr ...

  4. 浅谈最长上升子序列(O(n*logn)算法)

    今天GM讲了最长上升子序列的logn*n算法,但没讲思路... 我看了篇博客,发现-- 说的有道理!!! 首先,举例子: a[7]={1,2,4,3,6,7,5}(假设以1开头) 很明显,LIS=5: ...

  5. 视频云峰会|“科技 X 艺术” 的颗粒度体验是什么?

    科技日新月异,交互艺术新门类也随之蓬勃,当代艺术创作者不断凭借其想象力和跨学科能力,致力科技与艺术的融合创作. 7 月 10 日,在北京,2021 阿里云视频云全景创新峰会暨全球视频云创新挑战赛决赛颁 ...

  6. TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?

    大家好,我是小林. TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗? 这是个好问题,应该有不少人都会搞混,因为这两个东西看上去太像了,很容易误以为是同一个东西. ...

  7. python之字典(dict)基础篇

    字典:dict 特点: 1>,可变容器模型,且可存储任意类型对象,字符串,列表,元组,集合均可: 2>,以key-value形式存在,每个键值 用冒号 : 分割,每个键值对之间用逗号 , ...

  8. 第二章 - Java与协程

    Java与协程 内核线程的局限 通过一个具体场景来解释目前Java线程面临的困境.今天对Web应用的服务要求,不论是在请求数量上还是在复杂度上,与十多年前相比已不可同日而语,这一方面是源于业务量的增长 ...

  9. 1.3.5、通过Method匹配

    server: port: 8080 spring: application: name: gateway cloud: gateway: routes: - id: guo-system4 uri: ...

  10. mqtt 集成

    -- 在pom.xml导入依赖 <!-- mqtt --> <dependency> <groupId>org.springframework.boot</g ...