There are N obligatory books in a school program syllabus. The program also defines the order in which books should be read. Each book comes from a specific age, such as the enlightenment or the baroque period. The more books in a row the students read from any given age, the more they learn about it. Moreover, if they read a book from a different age, they will get distracted.
Teachers are allowed to replace K books from the program with alternatives. They want students to learn as much as possible from a single age (although they have not picked a particular specific age). The amount learned can be measured by the number of consecutive books from the same age read by the students. What is the maximum number of consecutive books from the same age after replacing at most K of them?
Note that the new books (after replacement) can be any books from the chosen age. They do not need to be listed in the syllabus, so the teacher can always find K books from the same age.
Write a function:
class Solution { public int solution(int[] A, int K); }
that, given an array of integers A of length N, representing the ages of consecutive books from the school program syllabus, and an integer K, returns the maximum number of consecutive books from the same age after replacing at most K of them.
Examples:
1. Given A = [1, 1, 3, 4, 3, 3, 4] and K = 2, the function should return 5. Teachers can replace books from age 4 with books from age 3.
2. Given A = [4, 5, 5, 4, 2, 2, 4] and K = 0, the function should return 2. Teachers are not allowed to replace any books.
3. Given A = [1, 3, 3, 2] and K = 2, the function should return 4. Teachers can replace all the books from other ages with books from age 3.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [1..100,000];
- K is an integer within the range [0..N];
- each element of array A is an integer within the range [1..100,000].
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, )
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
}
v
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
if()
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
if(r < l) return;
if(l == r)
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
if(i < l) return;
if(l == r)
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
if(i < l || i > r) return;
if(l == r){
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
if(i < l || i > r) return;
if(l == r){
if(ST[i] == null) ST[i] = new Node()
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node()
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int v){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node(i, v);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int v, f;
public Node(int v, int f){
this.v = v;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node(i, f);
else ST[id].f = f;
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node(i, f);
else ST[id].f = f;
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node(i, f);
else ST[id].f = f;
}else{
int m = (l + r)/
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void build(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node(i, f);
else ST[id].f = f;
}else{
int m = (l + r)/2;
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node(i, f);
else ST[id].f = f;
}else{
int m = (l + r)/2;
update(2 * id + 1, l, r, )
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node(i, f);
else ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid)
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node(i, f);
else ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mide + 1, r, i, f);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mide + 1, r, i, f);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mide + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mide + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mide + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
Solution.java:36: error: cannot find symbol update(2 * id + 2, mide + 1, r, i, f); ^ symbol: variable mide location: class Solution 1 error
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[] = new Node[4 * MAX_N];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
int f
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
int f
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length)
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = 0;
while(r++ < A.length)
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0,)
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
res = max(res, r - l + 1);
}
return res;
}
}
Exception in thread "main" java.lang.NullPointerException at Solution.update(Solution.java:33) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.solution(Solution.java:49) at Exec.run(exec.java:49) at Exec.main(exec.java:35)
Exception in thread "main" java.lang.NullPointerException at Solution.update(Solution.java:33) at Solution.update(Solution.java:37) at Solution.update(Solution.java:37) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.solution(Solution.java:49) at Exec.run(exec.java:49) at Exec.main(exec.java:35)
Exception in thread "main" java.lang.NullPointerException at Solution.update(Solution.java:33) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.update(Solution.java:36) at Solution.solution(Solution.java:49) at Exec.run(exec.java:49) at Exec.main(exec.java:35)
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
wh
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f)
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, )
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --fA[l++]])
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null)
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST = new Node[4 * MAX_N];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[] = new Node[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null)
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
ST
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[] = new Node[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int i, f;
public Node(int i, int f){
this.i = i;
this.f = f;
}
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[] = new Node[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node();
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
class Node{
int f;
}
Node max(Node n, Node m){
return n.f > m.f? n: m;
}
int max(int a, int b){
return a > b? a: b;
}
Node ST[] = new Node[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node();
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
int max(int a, int b){
return a > b? a: b;
}
Node ST[] = new Node[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node();
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
int max(int a, int b){
return a > b? a: b;
}
int ST[] = new int[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node();
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0].f > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
int max(int a, int b){
return a > b? a: b;
}
int ST[] = new int[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
if(ST[id] == null) ST[id] = new Node();
ST[id].f = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0] > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
int max(int a, int b){
return a > b? a: b;
}
int ST[] = new int[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id] = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0] > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
int max(int a, int b){
return a > b? a: b;
}
int ST[] = new int[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id] = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0] > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
int max(int a, int b){
return a > b? a: b;
}
int ST[] = new int[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id] = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0] > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
int MAX_N = 100000;
int max(int a, int b){
return a > b? a: b;
}
int ST[] = new int[4 * MAX_N];
int[] f;
void update(int id, int l, int r, int i, int f){
if(i < l || i > r) return;
if(l == r){
ST[id] = f;
}else{
int mid = (l + r)/2;
update(2 * id + 1, l, mid, i, f);
update(2 * id + 2, mid + 1, r, i, f);
ST[id] = max(ST[2 * id + 1], ST[2 * id + 2]);
}
}
public int solution(int[] A, int K) {
// write your code in Java SE 8
f = new int[MAX_N + 1];
int res = 0;
int l = 0, r = -1;
while(++r < A.length){
update(0, 1, MAX_N, A[r], ++f[A[r]]);
while(r - l + 1 - ST[0] > K){
update(0, 1 , MAX_N, A[l], --f[A[l++]]);
}
res = max(res, r - l + 1);
}
return res;
}
}
The solution obtained perfect score.
Tests where best interval does not start or does not end with book which should be chosen for optimal result.
Tests where the overall least common age dominates the best interval.
Semi-large random tests to distinguish between O(n^2) and O(n*log(n)^2) solutions.