GTY‘s gay friends 线段树+前缀和
链接
题意:n个数,m次询问,每次询问判断一个区间是否为一个序列
解法:
判断长度为x的序列只要满足两个条件: 1.区间和为(1+x)*x/2 2.1~x每个数只出现一次;
对于第一个限制前缀和求区间和即可
第二个限制可以用一个nt[]数组,存每个数y右边最近的一个相同数y的位置,用线段树维护nt[]数组,只要每次查询区间内的最小值大于r即表示每个数只出现了一次
#include<bits/stdc++.h> #define ls o*2 #define rs o*2+1 #define mid (l+r)/2 #define ll long long using namespace std; int n,m; int nt[1000006]; int tree[4000056]; ll sum[1000006] ; int a[1000006]; int mp[1000006]; void up(int o,int l,int r,int p,int v) {if(l==r){tree[o]=v;return ;}if(p<=mid){up(ls,l,mid,p,v);}else up(rs,mid+1,r,p,v);tree[o]=min(tree[ls],tree[rs]); }int qu(int o,int l,int r,int ql,int qr) {if(ql<=l&&r<=qr){return tree[o];}int mi=1e9;if(ql<=mid) mi=min(mi,qu(ls,l,mid,ql,qr));if(mid<qr) mi= min(mi,qu(rs,mid+1,r,ql,qr));return mi; } int main() {while(scanf("%d%d",&n,&m)!=EOF){memset(tree,0,sizeof(tree));for(int i=1;i<=n;i++){scanf("%d",&a[i]);mp[a[i]]=0;}for(int i=n;i>=1;i--){if(mp[a[i]]==0) nt[i]=1e9;else{nt[i]=mp[a[i]];}up(1,1,n,i,nt[i]);mp[a[i]]=i;}sum[0]=0;for(int i=1;i<=n;i++){sum[i]=a[i]+sum[i-1];}for(int i=0;i<m;i++){int l,r;scanf("%d%d",&l,&r);ll len=(r-l+1);if(sum[r]-sum[l-1]==(1+len)*len/2){if(qu(1,1,n,l,r)>r) puts("YES");else puts("NO");}else puts("NO");}} }
GTY‘s gay friends 线段树+前缀和相关推荐
- HDU 5172 GTY's gay friends 线段树+前缀和+全排列
题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172 bc(中文): http://bestcoder.hdu.edu.cn/contes ...
- HDU 5172 GTY's gay friends 线段树
GTY's gay friends Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- BestCoder Round #29 1003 (hdu 5172) GTY's gay friends [线段树 判不同 预处理 好题]
传送门 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- P1714 切蛋糕(线段树+前缀和)
P1714 切蛋糕 解题思路:求连续区间不超过k的最大值.先求出前缀和,线段树维护前缀和,在一个长度为k的区间,找到前缀和最小的,用最后的值减去这个值,得到的就是在这个区间里的最大值.如果长度不能到达 ...
- hdu 5172 GTY's gay friends(线段树最值)
题意: GTY有n个朋友,站成一排,每个人有一个特征值ai. 有m个询问.每次询问给两个数L,R.问你[L,R](即aL...aR)是否是1..(R-L+1)的一个全排列. 是输出YES,否则输出NO ...
- 【线段树】L - GTY‘s gay friends
题面 http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意 给你n个数,m次查询,每次询问一个区间[l,r],问这个区间[l,r]是否满足[l,r]之间的 ...
- HDU 5172 GTY's gay friends (线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意: 给你一个n个数的数组,m次询问,询问在[L, R] 这个区间里面有没有 [1, R-L+ ...
- 线段树 ---- CF1004F Sonya and Bitwise OR(线段树上分治合并区间信息 + or 前缀和的log性质)
题目链接 题目大意: 解题思路: 考虑只有一次询问时怎么做. 分治.每次考虑LLL位于左半边,RRR位于右半边的情况(也就是"跨过中点"的答案).再分别递归左.右两边.计算跨过中点 ...
- P3924 康娜的线段树(マジやばくね)(线段树、期望、前缀和)难度⭐⭐⭐★
P3924 康娜的线段树 我觉得挺难的,マ(ma)ジ(ji)や(ya)ば(ba)く(ku)ね(ne)(不得了了)知道康娜的应该都懂 题解 P3924 [康娜的线段树] #include<iost ...
最新文章
- 别再和面试官说不懂信号量Semaphore了!
- 百万用户规模的系统如何扩展
- C++:数字逆向输出
- 51CTO‘s Bug?
- textAppearance的属性设置
- 为什么要使用Mybatis框架?JDBC的缺点有哪些?
- java类与对象实验报告心得体会_java实验报告类与对象
- Attention Mechanisms in Computer Vision: A Survey论文阅读
- mysql和oracle的字符串拼接_Oracle和Mysql中的字符串的拼接
- 下列选项中不是具体的python序列类型的是_以下选项中,不是具体的Python序列类型的是...
- 你技术这么好,总要改变点什么把!
- C++洛谷题解(17)——P5713
- 自动机器学习框架介绍与使用(flaml、h2o)
- 机器学习_深度学习毕设题目汇总——运动活动动作
- VOB视频格式转换器怎么把vob转换为mp3
- 常见计算机病毒有些什么症状,电脑中病毒的症状有哪些
- git stash '储藏'当前工作状态
- 前端vue视频vue-video-player插件总结知识点案例(带源码)
- 职场——领导的话你得品,你不走心,就容易走人
- Kubernetes PodSecurityPolicy