博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2083: [Poi2010]Intelligence test
阅读量:4457 次
发布时间:2019-06-08

本文共 1057 字,大约阅读时间需要 3 分钟。

给n<=1e6的序列每个数<=1e6,求m<=1e6个询问,每次问一个长度L<=n的序列是不是一开始给的序列的子序列。

贪心一波,每进来一个数就找他最早的可能位置,这样是比后面的位置要好的。一开始预处理,把每个数字的编号,按数字大小第一关键字,编号第二,放在一个表里,在表里面二分即可。

1 #include
2 #include
3 #include
4 #include
5 //#include
6 using namespace std; 7 8 int n,m; 9 #define maxn 100001110 int a[maxn],ll[maxn],rr[maxn],list[maxn],cnt[maxn];11 int main()12 {13 scanf("%d",&n);14 memset(cnt,0,sizeof(cnt));15 memset(ll,0,sizeof(ll));memset(rr,0,sizeof(rr));16 for (int i=1;i<=n;i++) scanf("%d",&a[i]),cnt[a[i]]++;17 int now=1,Max=1e6+1;18 for (int i=0;i<=Max;i++) if (cnt[i]) ll[i]=rr[i]=now,now+=cnt[i];19 for (int i=1;i<=n;i++) list[rr[a[i]]++]=i;20 // for (int i=1;i<=n;i++) cout<
<<' ';cout<
>1;35 if (list[mid]>=now) R=mid;36 else L=mid+1;37 }38 if (L==rr[x])39 {40 flag=0;41 while (b--) scanf("%d",&x);42 break;43 }44 now=list[L]+1;45 }//cout<
View Code

 

转载于:https://www.cnblogs.com/Blue233333/p/7632581.html

你可能感兴趣的文章
提高效率必须改掉的7种习惯
查看>>
Java判断语句中判断条件的执行顺序
查看>>
Windows平台下tomcat+java的web程序持续占cpu问题调试
查看>>
OO第四次博客作业!
查看>>
HDU 吉哥系列故事——完美队形II 騰訊馬拉松初賽第二輪D題
查看>>
c++学习-继承
查看>>
[转]SQL Server 性能调优(io)
查看>>
设计模式学习-每日一记(6.原型模式)
查看>>
不已0开头的数字正则
查看>>
HTML撑起浮动子元素得父元素高度
查看>>
LeetCode--018--四数之和(java)
查看>>
Redis消息队列
查看>>
电商网站架构设计
查看>>
http://jingyan.baidu.com/article/4dc40848e7b69bc8d946f127.html
查看>>
WCF netTcp配置
查看>>
数据类型转换
查看>>
Nodejs学习笔记(2) 阻塞/非阻塞实例 与 Nodejs事件
查看>>
什么是FreeMaker
查看>>
设计模式学习笔记(总结篇:模式分类)
查看>>
TCP的三次握手/建立连接
查看>>