Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Created with IntelliJ IDEA.
- * User: Fcdkbear
- * Date: 11.02.13
- * Time: 16:48
- * To change this template use File | Settings | File Templates.
- */
- import java.util.Scanner;
- public class test {
- static long[][][][][] dp;
- static String s1,s2;
- static String getbin (long num)
- {
- String tmp="";
- while (num>0)
- {
- long v=(num%2);
- tmp+=(char)(v+'0');
- num/=2;
- }
- String res="";
- int n=tmp.length();
- for (int i=n-1; i>=0; --i)
- res+=tmp.charAt(i);
- return res;
- }
- static int len;
- static long rec(int p, int fl1, int fl2, int fr1, int fr2)
- {
- if (p==len)
- return 0;
- if (dp[p][fl1][fl2][fr1][fr2] != -1)
- return dp[p][fl1][fl2][fr1][fr2];
- int min1 = 0, max1 = 1;
- if ((fl1 == 0) && (s1.charAt(p) == '1'))
- min1 = 1;
- if ((fl2 == 0) && (s2.charAt(p) == '0'))
- max1 = 0;
- int min2 = 0, max2 = 1;
- if ((fr1 == 0) && (s1.charAt(p) == '1'))
- min2 = 1;
- if ((fr2 == 0) && (s2.charAt(p) == '0'))
- max2 = 0;
- long res = 0;
- for (int i=min1; i<=max1; ++i)
- for (int j=min2; j<=max2; ++j)
- {
- int v = (i ^ j);
- long toadd = 0;
- if (v == 1) {
- int step = len - p - 1;
- toadd = (1L << step);
- }
- int nfl1 = fl1, nfl2 = fl2, nfr1 = fr1, nfr2 = fr2;
- if (i > s1.charAt(p) - '0')
- nfl1 = 1;
- if (i < s2.charAt(p) - '0')
- nfl2 = 1;
- if (j > s1.charAt(p) - '0')
- nfr1 = 1;
- if (j < s2.charAt(p) - '0')
- nfr2 = 1;
- long res1= toadd + rec(p + 1, nfl1, nfl2, nfr1, nfr2);
- res = Math.max(res,res1);
- }
- return dp[p][fl1][fl2][fr1][fr2] = res;
- }
- public static void main(String [] args)
- {
- dp=new long[70][2][2][2][2];
- for (int i=0; i<70; ++i)
- dp[i]=new long[2][2][2][2];
- for (int i = 0; i < 70; ++i)
- for (int j=0; j<2; ++j)
- dp[i][j] = new long[2][2][2];
- for (int i = 0; i < 70; ++i)
- for (int j = 0; j < 2; ++j)
- for (int k=0; k<2; ++k)
- dp[i][j][k] = new long[2][2];
- for (int i = 0; i < 70; ++i)
- for (int j = 0; j < 2; ++j)
- for (int k = 0; k < 2; ++k)
- for (int c=0; c<2; ++c)
- dp[i][j][k][c] = new long[2];
- for (int i = 0; i < 70; ++i)
- for (int j = 0; j < 2; ++j)
- for (int k = 0; k < 2; ++k)
- for (int c = 0; c < 2; ++c)
- for (int l=0; l<2; ++l)
- dp[i][j][k][c][l]=-1;
- Scanner sc = new Scanner(System.in);
- long l=sc.nextLong();
- long r=sc.nextLong();
- s1=getbin(l);
- s2=getbin(r);
- while (s1.length()<s2.length())
- s1="0"+s1;
- len=s1.length();
- //System.out.println(s1);
- //System.out.println(s2);
- long res=rec(0,0,0,0,0);
- System.out.println(res);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement