GDKOI 2021 Day1 PJ 爆炸记
早上睡到 7:10 分才想起今天有 GDKOI ,赶紧去买了一个面包赶去机房
发现隔壁的大奆都过来了。比赛时由于昨晚一直没睡好,打了两个小时的哈欠
T1 :暴力模拟
根据 \(r\) 和 \(c\) 的错误个数有九种情况,
| =0 | =1 | >1 | |
|---|---|---|---|
| =0 | |||
| =1 | |||
| >1 | |||
| 分类讨论即可 |
T2 :RMQ 瞎弄
对与一个询问,在左右分别找到一个最近的比他高的点
可以用 RMQ + 二分,也可以离线
本蒟蒻用了前者,复杂度\(O(n\log n+q\log n)\)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=200005;
int x[N],n,T,p[35]={1},lg[N],f[N][35],vl;
LL sm[N],res;
inline int RMQ(int l,int r) {
register int k=lg[r-l+1];
return max(f[l][k],f[r-p[k]+1][k]);
}
int Left(int l,int r) {
register int mid;
while(l<r) {
mid=l+r>>1;
if(RMQ(mid+1,r)>=vl)l=mid+1;
else r=mid;
} return l;
}
int Right(int l,int r) {
register int mid;
while(l<r) {
mid=l+r>>1;
if(RMQ(l,mid)>=vl)r=mid;
else l=mid+1;
} return l;
}
int main() {
for(int i=1;i<31;i++)p[i]=p[i-1]<<1;
scanf("%d%d",&n,&T);
for(int i=1;i<=n;i++)scanf("%d",&x[i]),sm[i]=1LL*x[i]+sm[i-1],f[i][0]=x[i];
for(int i=2;i<=n;i++)lg[i]=lg[i>>1]+1;
++n,x[0]=x[n]=f[n][0]=f[0][0]=2000000000;
for(int j=1;j<31;j++)
for(int i=0;i+p[j-1]-1<=n;i++)
f[i][j]=max(f[i][j-1],f[i+p[j-1]][j-1]);
for(int p,u,v;T--;) {
scanf("%d%d",&p,&vl);
u=Left(0,p-1),v=Right(p+1,n+1);
res=1LL*(v-u-1)*vl-sm[v-1]+sm[u];
printf("%lld\n",res);
}
}
T3 贪心
真的比第一题还人口普查,直接排序贪心,用两个指针
- a[i]+a[j]>r ,直接删 j
- a[i]+a[j]<l ,直接删 i
- 匹配成功
T4 离线
贪心思想:钱都去买通票最后花费不会变多
离线,先将边按边权递增排序,再将查询按上限排序
把边权小于上限的边都删掉,并把删掉的边两点所在联通块合并
最后答案就是起点所在联通块点个数
#include<bits/stdc++.h>
using namespace std;
const int N=400005;
int n,m,T,ans[N],fa[N],sm[N],x[N],y[N],z[N],u[N],v[N],w[N];
void Sort(int l,int r) {
int i=l,j=r,mid=w[l+r>>1];
while(i<=j) {
while(w[i]<mid)++i;
while(w[j]>mid)--j;
if(i<=j) {
swap(u[i],u[j]);
swap(v[i],v[j]);
swap(w[i],w[j]);
i++,j--;
}
}
if(i<r)Sort(i,r);
if(j>l)Sort(l,j);
}
inline int Fnd(int x) {
return fa[x]^x?fa[x]=Fnd(fa[x]):x;
}
void Kp(int l,int r) {
int i=l,j=r,mid=y[l+r>>1];
while(i<=j) {
while(y[i]<mid)++i;
while(y[j]>mid)--j;
if(i<=j) {
swap(x[i],x[j]);
swap(y[i],y[j]);
swap(z[i],z[j]);
i++,j--;
}
}
if(i<r)Kp(i,r);
if(j>l)Kp(l,j);
}
int main() {
freopen("travel.in","r",stdin);
freopen("travel.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&u[i],&v[i],&w[i]);
for(int i=1;i<=m;i++)fa[i]=i,sm[i]=1;
if(m>1)Sort(1,m);
scanf("%d",&T);
for(int i=1;i<=T;i++)scanf("%d%d",&x[i],&y[i]),z[i]=i;
if(T>1)Kp(1,T);
for(int i=1,j=1,p,q;i<=T;i++) {
while(j<=m && w[j]<=y[i]) {
p=Fnd(u[j]),q=Fnd(v[j]),++j;
if(p^q)fa[q]=p,sm[p]+=sm[q];
} ans[z[i]]=sm[Fnd(x[i])];
}
for(int i=1;i<=T;i++)printf("%d\n",ans[i]);
}
End
今天的第一题情况没考虑全,要细心
T2 和 T3 发挥不错, T4 这种动态题可以想想离线
GDKOI 2021 Day1 PJ 爆炸记的更多相关文章
- GDKOI 2021 Day3 PJ 懵逼记
今天早了一点起来,初三的大奆都来做比赛了, 自然,自测的有许多 AK 虽然今天的题比昨天简单,但还是脑子还是十分迟钝,以至于贪心都想不出 真为明天的提高组而担忧 T1 斜率被卡 90 ,直接用勾股定理 ...
- GDKOI 2021 Day2 PJ 去世记
比赛时和昨天一样困,后面的大奆打代码的速度简直了 T1 用 2.4.6.8 来与 5 抵消掉末尾的 0 ,然后用周期问题的方法直接乘起来并取个位 #include<bits/stdc++.h&g ...
- GDKOI 2021 Day1 TG 。。。
看着一群群比 LHF , HQX 还强的大佬涌进了机房,本蒟蒻表示慌得一批 T1 讲题人说最简单的签到题本蒟蒻表示... \(Update\) 用 ds , dt 两个变量记录点 i 连向 s 或 t ...
- noip2018 爆炸记
noip2018 爆炸记 day-4 ~ day-2 最后考了两套模拟题,题目好水啊,但是我还是爆炸了. 第一套最后一道题竟然时一道毒瘤打表?但是我看着插头DP可做啊..(然而我并不会插头DP)然后还 ...
- GDKOI2021 爆炸记
@ 目录 GDKOI2021 爆炸记 前言 普及(Day 1~3) Day one 比赛 赛后聊天 下午讲题 下午讲课 晚上 Day two 比赛 赛后聊天 下午讲题 下午讲课 晚上 Day thre ...
- thuwc2018 爆炸记
从没考过这么差,必须好好总结一下.. $day1$: 上午到了雅礼洋湖,下午就开始考试.. 食堂饭菜还是很不错的,听说都是雅礼自己垫的? 下午的$day1$爆炸了.. 开考以后看了一下三个题,感觉一开 ...
- NOIP2018爆炸记
又是一年\(NOIP\),可能是梦结束的地方? 之所以咕了这么久是得先确定自己不会退役,因为分太低了. 和去年一样在学校门前照了相,然后上车走了.高三回来考的只剩下\(p2oileen\)学姐了.新一 ...
- noip2017爆炸记——题解&总结&反省(普及组+提高组)
相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...
- THUWC2018 暴力+爆炸记
Day 0 没有Day0. Day 1 签到然后去宿舍,环境还行,比某偏远山区要强多了,不过这热水有点难拿??看RP有遇到煮好水的饮水机就拿,没有就苟矿泉水. 中午,那个餐还是挺好吃的,不过餐费40就 ...
随机推荐
- maven项目中各文件都没有报错,但是项目名称有红叉
项目报错可以看到Problems(可以在Window--Show View--other--输入Problems找到) 一.可能原因 1.项目中各文件没有报错,但是项目名称中 ...
- 在IntelliJ IDEA配置Tomcat
1,点击Run---EDit Configurations... 2.点击左侧"+"号,找到Tomcat Server---Local(若是没有找到Tomcat Server 可以 ...
- [强网杯2019]upload buuoj
提示:重点在这,可节省大部分时间 扫描后台 发现www.tar.gz备份文件. 这平台有429[太多请求限制]防护.dirsearch扫描一堆429.于是用了最笨的方法. 文件上传 先注册个账号 注册 ...
- pip——重新安装
原因 没有用管理员的权限安装.导致失败. 并且pip还被卸载了. 使用环境 win10 重新安装pip python -m ensurepip 更新pip 管理员打开cmd python -m pip ...
- 网络协议之:socket协议详解之Unix domain Socket
目录 简介 什么是Unix domain Socket 使用socat来创建Unix Domain Sockets 使用ss命令来查看Unix domain Socket 使用nc连接到Unix do ...
- 【面试普通人VS高手系列】Spring Boot的约定优于配置,你的理解是什么?
对于Spring Boot约定优于配置这个问题,看看普通人和高手是如何回答的? 普通人的回答: 嗯, 在Spring Boot里面,通过约定优于配置这个思想,可以让我们少写很多的配置, 然后就只需要关 ...
- Java学习day20
一个简单的鼠标点击在窗口画点的程序 今天学习了键盘监听和Swing窗口 Swing可以理解为是AWT的升级版本,方法名字等大都相似,例如Frame和JFrame AWT如果要关闭窗口,需要使用窗口监听 ...
- 微信小程序wx.login先执行onLaunch与onLoad加载顺序问题
@ 目录 遇到问题 请求api返回需要先登录,实际上登录已成功 问题分析 解决问题 自定义回调函数 app.js index.js 扩展提问 学习交流 随机数字随机幸运数+ My Blog 技术交流 ...
- Day 006:PAT练习--1005 Spell It Right (20 分)
上星期一直在写报告乱七八糟的,从今天开始不刷乙级的了,还是多刷甲级进步来得快一点! 显而易见,该题的关键在于将输入之和的每一位从高到低输出,这里我们发现题意中的输入数的范围为0-10^100,显然我们 ...
- Linux下的计划任务—crontab
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 来自:Linux就该这么学 crond 是linux下用 ...