| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
[JAVA] 1110MSimport java.io.*;
import java.util.*;
public class Main {
public static class Scanner {
BufferedReader br;
StringTokenizer st;
public Scanner(InputStream s) {
br = new BufferedReader(new InputStreamReader(s));
}
public Scanner(FileReader f) {
br = new BufferedReader(f);
}
public String next() throws IOException {
while (st == null || !st.hasMoreTokens()) {
st = new StringTokenizer(br.readLine());
}
return st.nextToken();
}
public int nextInt() throws IOException {
return Integer.parseInt(next());
}
public long nextLong() throws IOException {
return Long.parseLong(next());
}
public double nextDouble() throws IOException {
return Double.parseDouble(next());
}
public int[] nextIntArr(int n) throws IOException {
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(next());
}
return arr;
}
}
public static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
static int N = 100001;
static int[] log2 = new int[N];
static void make() {
int cnt = -1;
log2[0] = -1;
for (int i = 1; i < N; i++) {
cnt += ((i & (i - 1)) == 0) ? 1 : 0;
log2[i] = cnt;
}
}
int[][] st;
int n;
public Main() {
}
public void init(int n, int[] a) {
this.n = n;
int k = log2[n];
st = new int[n][k + 1];
for (int i = 0; i < n; i++) {
st[i][0] = a[i];
}
for (int j = 1; j <= k; j++) {
for (int i = 0; i < n; i++) {
int i2 = i + (1 << (j - 1));
if (i2 >= n) break;
st[i][j] = Math.max(st[i][j - 1], st[i2][j - 1]);
}
}
}
public int query(int l, int r) {
if (l > r) return 0;
int k = log2[r - l + 1];
return Math.max(st[l][k], st[r - (1 << k) + 1][k]);
}
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
make();
int n = scanner.nextInt();
while (n != 0) {
int q = scanner.nextInt();
int[] a = new int[n];
int[] fs = new int[n];
Arrays.fill(fs, 1);
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
for (int i = 1; i < n; i++) {
if (a[i] == a[i - 1]) {
fs[i] = fs[i - 1] + 1;
}
}
Main main = new Main();
main.init(n, fs);
for (int i = 0; i < q; i++) {
int l = scanner.nextInt() - 1;
int r = scanner.nextInt() - 1;
if (l == 0) {
out.println(main.query(l, r));
} else {
int t = l;
while (t <= r && a[t - 1] == a[t]) {
t++;
}
int x = t - l;
out.println(Math.max(x, main.query(t, r)));
}
}
n = scanner.nextInt();
}
out.flush();
out.close();
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator