Codeforces Round 923 (Div. 3) D. Find the Different Ones!(Java)

比赛链接:Codeforces Round 923 (Div. 3)

D题传送门:D. Find the Different Ones!

题目:

在这里插入图片描述
Example
input

5
5
1 1 2 1 1
3
1 5
1 2
1 3
6
30 20 20 10 10 20
5
1 2
2 3
2 4
2 6
3 5
4
5 2 3 4
4
1 2
1 4
2 3
2 4
5
1 4 3 2 4
5
1 5
2 4
3 4
3 5
4 5
5
2 3 1 4 2
7
1 2
1 4
1 5
2 4
2 5
3 5
4 5

output

2 3
-1 -1
1 3

2 1
-1 -1
4 2
4 6
5 3

1 2
1 2
2 3
3 2

1 3
2 4
3 4
5 3
5 4

1 2
4 2
1 3
2 3
3 2
5 4
5 4

分析:

题目要求: 在数组 a[i] 中,在下标l到r中找到不同的 a[i] ,如果存在输出两个下标,否则输出-1

我们可以定义一个数组 p[i] ,用于记录a[i]的”前缀和“,p[i] = p[i-1] + com,定义 com 用于记录 p[i] 每次增加的值(相邻的 a[i] 是否相等),如果 a[i] = a[i-1],则com = 0;如果 a[i] != a[i-1],com = 1。

对于每次询问,我们使用二分来查找不同 a[i] 的下标用 l,r(l < r) 记录。

如果 a[l] = a[r],找到答案;否则当下标为 mid = (l+r+1)/2 时,求 p[l] 与p[mid]的关系。

如果 p[l] = p[mid] ,说明在 l 到 mid 中,a[i] 都相等,答案可能在 mid 到 r,更新 l 的值;
如果 p[l] != p[mid],说明 l 到 mid 中存在不相等的a[i],更新 r 的值。

代码:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) { 
    	Scanner sc = new Scanner(System.in);
    	int tt = sc.nextInt();
    	while(tt-->0) {
    		int n = sc.nextInt();
    		int [] a = new int [n+10];
    		int [] p = new int [n+10];
    		for(int i = 1;i <= n;i++) {
    			a[i] = sc.nextInt();
    			int com = 1;
    			if(a[i-1]==a[i]) com=0;
    			p[i]=p[i-1]+com;
    		}
    		int q = sc.nextInt();
    		while(q-->0) {
    			int l = sc.nextInt();int r = sc.nextInt();
    			boolean f = false;
    			while(l < r) {
    				if(a[r]!=a[l]) {
    					f = true;break;
    				}
    				int mid = (l+r+1)/2;
    				if(p[l]==p[mid]) l = mid;
    				else r = mid;
    			}
    			if(f) System.out.println(l+" "+r);
    			else System.out.println(-1+" "+-1);
    		}
    		System.out.println();
    	}
    }
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
完美下载版,可以打开 The post-Ajaxian Web 2.0 world of wikis, folksonomies, and mashups makes well-planned information architecture even more essential. How do you present large volumes of information to people who need to find what they're looking for quickly? This classic primer shows information architects, designers, and web site developers how to build large-scale and maintainable web sites that are appealing and easy to navigate. The new edition is thoroughly updated to address emerging technologies -- with recent examples, new scenarios, and information on best practices -- while maintaining its focus on fundamentals. With topics that range from aesthetics to mechanics, Information Architecture for the World Wide Web explains how to create interfaces that users can understand right away. Inside, you'll find: An overview of information architecture for both newcomers and experienced practitioners The fundamental components of an architecture, illustrating the interconnected nature of these systems. Updated, with updates for tagging, folksonomies, social classification, and guided navigation Tools, techniques, and methods that take you from research to strategy and design to implementation. This edition discusses blueprints, wireframes and the role of diagrams in the design phase A series of short essays that provide practical tips and philosophical advice for those who work on information architecture The business context of practicing and promoting information architecture, including recent lessons on how to handle enterprise architecture Case studies on the evolution of two large and very different information architectures, illustrating best practices along the way How do you document the rich interfaces of web applications? How do you design for multiple platforms and mobile devices? With emphasis on goals and approaches over tactics or technologies, this enormously popular book gives you knowledge about information architecture with a framework that allows you to learn new approaches -- and unlearn outmoded ones.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值