大意

给定一个长度为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 选择客栈相关推荐

  1. 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 ...

  2. JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

    题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...

  3. 【二分,找规律】Day 14 提高组模拟C组 T1 小麦亩产一千八

    题目大意 给定斐波那契的第aaa项,求出第b" role="presentation">bbb项,默认第0项为1 解题思路 方法一:递推 找到规律后O(b)O(b) ...

  4. 第一届『Citric杯』NOIP提高组模拟赛 题解

    [官方题解]第一届『Citric杯』NOIP提高组模拟赛 题解 第一题 柠檬超市 这题是本次模拟赛的送分题.做法显然. 但是注意此题有一个陷阱: 注意W和C的规模都是10^9,所以如果直接用doubl ...

  5. JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树

    梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

  6. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  7. {小结}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. 洗 ...

  8. 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 ...

  9. 2021.01.14【NOIP提高B组】模拟 总结

    2021.01.14[NOIP提高B组]模拟 总结 第一题 Candy 奇奇怪怪的题目. 一开始没有理解题目,其实就是同时变换. 打了一个暴力. 本人随机生成50000组数据,都过了,时间没超.希望出 ...

最新文章

  1. HOG特征过程解释(转)
  2. Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】
  3. Ajax异步调用Web服务的例子
  4. 面向对象--第三部分
  5. STL泛型算法:reverse
  6. 04.elasticsearch_get操作
  7. python数据结构基础的重点内容_Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】...
  8. 求两个字符串的最长的连续公共子串
  9. 简易银行管理系统(C语言)
  10. Ubuntu安装应用商店中没有的软件
  11. 关于Redis数据库
  12. 世纪龙校招java开发一、二面 面经
  13. java判断字符个数_使用Java判断字符串中的中文字符数量
  14. Java Web项目性能测试 - JMeter测试网站吞吐量、反应时间百分比、流量
  15. 《智慧书》格言(序)
  16. Laragon集成环境安装
  17. 想学设计模式、想搞架构设计,先学学 UML 系统建模吧
  18. 求系统的冲击响应和阶跃响应
  19. 热图3:热图行列分组信息注释
  20. 【Computer Graphics】直线方程及相关计算

热门文章

  1. linux刻录win10u盘_使用UltraISO在Windows 10下刻录Ubuntu 18.04.2 U盘的方法
  2. java android知识点总汇
  3. FTP服务器vsftpd安装架设
  4. Nginx——nginx作为静态资源web服务(配置语法)
  5. Failed to register product: 检索 COM 类工厂中 CLSID 为 {1ECCA34C-E88A-44E3-8D6A-8921BDE9E452} 的组件失败,原因是...
  6. python字典及嵌套遍历
  7. _STORAGE_WRITE_ERROR_:./Application/Runtime/Cache/Admin/0dfec61edd66f450033aa87c28a760f4.php
  8. agc38C LCMs
  9. DevOps工具链:开放、自由地选择最适合团队和业务需要的工具
  10. ZZULIOJ 1788 小金刚的宝藏 (01背包)