2019.1.18【NOIP提高组】模拟B组 JZOJ 3025 选择客栈
大意
给定一个长度为nnn的序列,其中的每个元素都有一定的颜色和权值,现要求找到一对颜色相同且它们间的元素(包括自己)的权值最小值必须不大于ppp,求方案数
数据范围:
n≤500000,颜色数≤50n\leq 500000,颜色数\leq 50n≤500000,颜色数≤50
思路
听说有些巨佬用O(kn)O(kn)O(kn)(kkk为颜色总数)的方法过掉了这道题。
本蒟蒻不才,写了一个ststst表来膜拜大佬
显然,我们只需要找到颜色相等的一对数,然后判断它们间的最小值是否合法即可。
找到颜色相等的一对数可以用vectorvectorvector存,判断区间最小值是否合法可用ststst表,实际得分70
观察发现,如果l,rl,rl,r这一组数是合法的,则l,next[r]l,next[r]l,next[r]显然也合法,所以,当我们找到任意一组时就可以结束判断了,实际得分100
复杂度分析
由于枚举的是kn2kn^2kn2所以理论复杂度是如此的,但显然单种颜色的数目越多,合法的数目自然也会多,找到第一组的时间也越短,时间就短
若颜色种类多,则实际每次循环的量很小,实际复杂度也很小
所以,该算法的均摊复杂度可以算为O(nlogn+kn)O(nlogn+kn)O(nlogn+kn)的,但是,若出题人执意要卡的话,将所有的酒店都设为不合法且颜色相同,还是会被卡掉。不过,若是用前缀和的方法的话,出题人也可以增加颜色种类而卡掉,这时则ststst表会更为优秀
代码
#include<cctype>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;int f[200001][21],n,log[200001],k,p,x,l,r,ans,len,co[200001];
vector<int>col[51];
inline char Getchar()
{static char buf[1000000],*p1=buf+1000000,*pend=buf+1000000;if(p1==pend){p1=buf; pend=buf+fread(buf,1,1000000,stdin);if (pend==p1) return -1;}return *p1++;
}
inline long long read()
{char c;int d=1;long long f=0;while(c=Getchar(),!isdigit(c))if(c==45)d=-1;f=(f<<3)+(f<<1)+c-48;while(c=Getchar(),isdigit(c)) f=(f<<3)+(f<<1)+c-48;return d*f;
}
inline void write(register long long x)
{if(x<0)putchar(45),x=-x;if(x>9)write(x/10);putchar(x%10+48);return;
}
void work()
{for(int j=1;1<<j<=n;j++) for(int i=1;i+(1<<j)-1<=n;i++)f[i][j]=min(f[i][j-1],f[i+(1<<j-1)][j-1]);//st表求RMQreturn;
}
int minn(int x,int y)
{int z=log[y-x+1];return min(f[x][z],f[y-(1<<z)+1][z]);
}
signed main()
{memset(f,0x3f3f3f3f,sizeof(f));log[2]=1;n=read();k=read();p=read();for(register int i=3;i<=n;i++) log[i]=log[i>>1]+1;//预处理log,加速for(register int i=1;i<=n;i++){x=read();f[i][0]=read();col[x].push_back(i);co[i]=x;//输入}work();//st表求RMQfor(register int i=0;i<k;i++){for(register int l=0;l<col[i].size()-1;l++)for(register int r=l+1;r<col[i].size();r++)if(minn(col[i][l],col[i][r])<=p) {ans+=col[i].size()-r;break;}//枚举+判断}write(ans);//输出
}
2019.1.18【NOIP提高组】模拟B组 JZOJ 3025 选择客栈相关推荐
- JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
Description Input Output Sample Input 4 4 2 a a b b a a b b c c d d c c d d 1 1 3 3 2 2 3 1 1 3 2 2 ...
- JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会
题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...
- 【二分,找规律】Day 14 提高组模拟C组 T1 小麦亩产一千八
题目大意 给定斐波那契的第aaa项,求出第b" role="presentation">bbb项,默认第0项为1 解题思路 方法一:递推 找到规律后O(b)O(b) ...
- 第一届『Citric杯』NOIP提高组模拟赛 题解
[官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...
- JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树
梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...
- 2018.12.08【NOIP提高组】模拟B组总结(未完成)
2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...
- {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C
2016.6.11[初中部 NOIP提高组 ]模拟赛C No.1!!! 100+33.3+10+90=233.3 23333 1298. 牛棚(graze2.pas/c/cpp) 题解 1299. 洗 ...
- 6271. 2019.8.4【NOIP提高组A】锻造 (forging)
6271. 2019.8.4[NOIP提高组A]锻造 (forging) (File IO): input:forging.in output:forging.out Time Limits: 15 ...
- 2021.01.14【NOIP提高B组】模拟 总结
2021.01.14[NOIP提高B组]模拟 总结 第一题 Candy 奇奇怪怪的题目. 一开始没有理解题目,其实就是同时变换. 打了一个暴力. 本人随机生成50000组数据,都过了,时间没超.希望出 ...
最新文章
- HOG特征过程解释(转)
- Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】
- Ajax异步调用Web服务的例子
- 面向对象--第三部分
- STL泛型算法:reverse
- 04.elasticsearch_get操作
- python数据结构基础的重点内容_Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】...
- 求两个字符串的最长的连续公共子串
- 简易银行管理系统(C语言)
- Ubuntu安装应用商店中没有的软件
- 关于Redis数据库
- 世纪龙校招java开发一、二面 面经
- java判断字符个数_使用Java判断字符串中的中文字符数量
- Java Web项目性能测试 - JMeter测试网站吞吐量、反应时间百分比、流量
- 《智慧书》格言(序)
- Laragon集成环境安装
- 想学设计模式、想搞架构设计,先学学 UML 系统建模吧
- 求系统的冲击响应和阶跃响应
- 热图3:热图行列分组信息注释
- 【Computer Graphics】直线方程及相关计算
热门文章
- linux刻录win10u盘_使用UltraISO在Windows 10下刻录Ubuntu 18.04.2 U盘的方法
- java android知识点总汇
- FTP服务器vsftpd安装架设
- Nginx——nginx作为静态资源web服务(配置语法)
- Failed to register product: 检索 COM 类工厂中 CLSID 为 {1ECCA34C-E88A-44E3-8D6A-8921BDE9E452} 的组件失败,原因是...
- python字典及嵌套遍历
- _STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/0dfec61edd66f450033aa87c28a760f4.php
- agc38C LCMs
- DevOps工具链:开放、自由地选择最适合团队和业务需要的工具
- ZZULIOJ 1788 小金刚的宝藏 (01背包)