Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;import java.lang.*;import java.util.*;
- //* --> number of prime numbers less then or equal to x are --> x/ln(x)
- //* --> String concatenation using the + operator within a loop should be avoided. Since the String object is immutable, each call for concatenation will
- // result in a new String object being created.
- // THE SIEVE USED HERE WILL RETURN A LIST CONTAINING ALL THE PRIME NUMBERS TILL N
- public class dp9 {static FastScanner sc;static PrintWriter pw;static class FastScanner {InputStreamReader is;BufferedReader br;StringTokenizer st;
- public FastScanner() {is = new InputStreamReader(System.in);br = new BufferedReader(is);}
- String next() throws Exception {while (st == null || !st.hasMoreElements())st = new StringTokenizer(br.readLine());
- return st.nextToken();}int nextInt() throws Exception {return Integer.parseInt(next());}long nextLong() throws Exception {
- return Long.parseLong(next());}int[] readArray(int num) throws Exception {int arr[]=new int[num];
- for(int i=0;i<num;i++)arr[i]=nextInt();return arr;}String nextLine() throws Exception {return br.readLine();
- }} public static boolean power_of_two(int a){if((a&(a-1))==0){ return true;}return false;}
- static boolean PS(double x){if (x >= 0) {double i= Math.sqrt(x);if(i%1!=0){
- return false;}return ((i * i) == x);}return false;}public static int[] ia(int n){int ar[]=new int[n];
- return ar;}public static long[] la(int n){long ar[]=new long[n];return ar;}
- public static void print(int ans,int t){System.out.println("Case"+" "+"#"+t+":"+" "+ans);}
- static long mod=1000000007;static int max=Integer.MIN_VALUE;static int min=Integer.MAX_VALUE;
- public static void sort(long[] arr){//because Arrays.sort() uses quicksort which is dumb
- //Collections.sort() uses merge sort
- ArrayList<Long> ls = new ArrayList<Long>();for(long x: arr)ls.add(x);Collections.sort(ls);
- for(int i=0; i < arr.length; i++)arr[i] = ls.get(i);}public static long fciel(long a, long b) {if (a == 0) return 0;return (a - 1) / b + 1;}
- static boolean[] is_prime = new boolean[1000001];static ArrayList<Integer> list = new ArrayList<>();
- static long n = 1000000;public static void sieve() {Arrays.fill(is_prime, true);
- is_prime[0] = is_prime[1] = false;for (int i = 2; i * i <= n; i++) {
- if (is_prime[i]) {for (int j = i * i; j <= n; j += i)is_prime[j] = false;}}for (int i = 2; i <= n; i++) {
- if (is_prime[i]) {list.add(i);}}}
- // ---------- NCR ---------- \
- static int NC=100005;
- static long inv[]=new long[NC];
- static long fac_inv[]=new long[NC];
- static long fac[]=new long[NC];public static void initialize()
- {
- long MOD=mod;
- int i;
- inv[1]=1;
- for(i=2;i<=NC-2;i++)
- inv[i]=(MOD-MOD/i)*inv[(int)MOD%i]%MOD;
- fac[0]=fac[1]=1;
- for(i=2;i<=NC-2;i++)
- fac[i]=i*fac[i-1]%MOD;
- fac_inv[0]=fac_inv[1]=1;
- for(i=2;i<=NC-2;i++)
- fac_inv[i]=inv[i]*fac_inv[i-1]%MOD;
- }
- public static long ncr(int n,int r)
- {
- long MOD=mod;
- if(n<r) return 0;
- return (fac[n]*fac_inv[r]%MOD)*fac_inv[n-r]%MOD;
- }
- // ---------- NCR ---------- \
- public static void main(String args[]) throws java.lang.Exception {
- sc = new FastScanner();pw = new PrintWriter(System.out);StringBuilder s = new StringBuilder();
- int n=sc.nextInt();
- int ar[]=new int[n];
- for(int i=0;i<n;i++){
- ar[i]=sc.nextInt();
- }
- boolean dp[][]=new boolean[n][6];
- for(int i=1;i<=5;i++)
- {
- dp[0][i]=true;
- }
- for(int i=1;i<n;i++)
- {
- for(int j=1;j<=5;j++)
- {
- if(ar[i]>ar[i-1])
- {
- dp[i][j]=dp[i-1][Math.max(j-1,0)]|dp[i-1][Math.max(j-2,0)]|dp[i-1][Math.max(j-3,0)]|dp[i-1][Math.max(j-4,0)];
- }
- else if(ar[i]<ar[i-1])
- {
- dp[i][j]=dp[i-1][Math.min(j+1,5)]|dp[i-1][Math.min(j+2,5)]|dp[i-1][Math.min(j+3,5)]|dp[i-1][Math.min(j+4,5)];
- }
- else{
- for(int k=1;k<=5;k++)
- {
- if(k!=j)
- {
- dp[i][j]|=dp[i-1][k];
- }
- }
- }
- }
- }
- for(boolean i[]:dp)
- {
- for(boolean j:i)
- {System.out.print(j+" ");}
- System.out.println();
- }
- ArrayList<Integer> list=new ArrayList<>();
- for(int i=1;i<=5;i++)
- {
- if(dp[0][i])
- {
- list.add(i);
- call(dp,list,ar,1);
- break;
- }
- }
- if(list.size()==0)
- {
- s.append(-1);
- }
- else{
- for(int i:list)
- {
- s.append(i+" ");
- }
- }
- pw.print(s);pw.close();}
- public static void call(boolean dp[][],ArrayList<Integer> list,int ar[],int i)
- {
- if(i>=ar.length)
- {
- return;
- }
- if(ar[i]>ar[i-1])
- {
- for(int j=1;j<=5;j++)
- {
- if(dp[i][j] && j>list.get(list.size()-1))
- {
- list.add(j);
- call(dp, list, ar, i+1);
- break;
- }
- }
- }
- else if(ar[i]<ar[i-1])
- {
- for(int j=1;j<=5;j++)
- {
- if(dp[i][j] && j<list.get(list.size()-1))
- {
- list.add(j);
- call(dp, list, ar, i+1);
- break;
- }
- }
- }
- else{
- for(int j=1;j<=5;j++)
- {
- if(dp[i][j] && j!=list.get(list.size()-1))
- {
- list.add(j);
- call(dp, list, ar, i+1);
- break;
- }
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment