题目链接:

http://codeforces.com/problemset/problem/622/C

题目大意:

给定一个长度为n(n不超过200000)的序列,有m(m不超过200000)次询问,第i次询问一个区间[li,ri]内是否存在一个数不等于一个给定值x。如果存在,就输出这个数的位置,否则输出-1。

解题思路:

预处理一个数组p[n]。p[i]表示从位置i向左一直到位置0,第一个不等于a[i]的数的位置。可以以o(n)的复杂度通过对递推实现。具体来说就是首先令p[0]=-1,然后从左向右递推,若a[i - 1] != a[i],则p[i] = i - 1,否则p[i] = p[i - 1]。

查询的时候首先检查a[r]是否等于x。若不等于则找到一个解r;否则检查p[r]即可。

代码:

 #include <iostream>
#include <cstdio>
using namespace std; int a[];
int p[];
int n, t, l, r, x;
void init()
{
p[] = -;
for (int i = ; i < n; i++)
{
if (a[i] != a[i - ])
p[i] = i - ;
else
p[i] = p[i - ];
}
}
int main()
{
cin >> n >> t;
for (int i = ; i < n; i++)
{
scanf("%d", &a[i]);
}
init();
while (t--)
{
scanf("%d %d %d", &l, &r, &x);
l--;
r--;
if (a[r] != x)
{
printf("%d\n", r + );
}
else
{
if (p[r] != - && p[r] >= l)
{
printf("%d\n", p[r] + );
}
else
{
puts("-1");
}
}
}
return ;
}

最新文章

  1. 从Undo,Redo谈命令模式
  2. Android自定义View 画弧形,文字,并增加动画效果
  3. SQL Server 2008 R2——用CTE进行递归计算求解累计值
  4. 学霸数据处理项目之数据处理网页以及后台以及C#代码部分开发者手册
  5. 解除svn版本控制
  6. mysql,实现数据库检索结果添加自增的序号
  7. Spring@Autowired注解与自动装配
  8. Git补丁
  9. LinQ综合应用实例
  10. poj 3126 Prime Path( bfs + 素数)
  11. bzoj1027
  12. linux下通过yum安装svn及配置
  13. spring AOP简单入门
  14. DevExpress中获取RichTextEdit中RichEditControl的两种方式
  15. c# 配置文件App.config操作类库
  16. Struts配置的各种视图转发类型
  17. Android 使用TextView实现跑马灯效果
  18. AI学习吧-公钥私钥、沙箱环境
  19. Es6入门解构
  20. Java知识锦囊

热门文章

  1. TCO 2016 Round 1B
  2. maven配置本地仓库和国内镜像仓库,解决国内访问国外中央仓库速度过慢问题
  3. windows下关闭指定端口服务,解决tomcat端口占用问题
  4. MyBatis学习 之 七、mybatis各种数据库的批量修改
  5. NOI1995 石子合并
  6. MongoDB复制集安全认证
  7. vue-resource 设置请求的参数以formData形式以及设置请求的过滤器
  8. bzoj1783
  9. 初识NDA
  10. 【198】Synergy - 鼠标键盘共享软件