首页 > 代码库 > [shyのJAVA初探]hdu1166●树状数组
[shyのJAVA初探]hdu1166●树状数组
一开始shy是为了大数而走近java,随后情不自禁地就希望能初步了解java的语言特点。
java初学对c++选手而言可谓简单非常。因为java的语法和c++的语法简直一样(虽然这话不太严谨,容易遭到很多反驳,不过,,shy实在是没有见过如此相像的两种语言)。比如,①java开变量的方式是:int x;char c;boolean b;②java的for循环:for(int i=1;i<=n;i++){}③java的条件语句:if(--cas>0&&str!="end"){}④java的位运算:x+=x&(-x)⑤java对大小写敏感。。总之,学起来还是非常快速的。
不过坑点也不是没有,就近几日发现的稍微列一下,①比较正常的java读入方式\输出方式:Scanner read=new Scanner(System.in);\System.out.println("");然而,这样子的效率很低,不论怎么搞都是要超时的。②java不能传递变参、不能用指针等。③大数不能直接赋值,大数、字符串等不能直接比较或取值,也不能直接开必须要new。④java输出优化后,必须要flush()来强制输出缓冲区内的内容,不然不满的情况下java不输出。
hdu1166就是树状数组模板题,单点修改、区间求和。
1 import java.io.*; 2 3 public class Main { 4 5 static StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); 6 static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out)); 7 8 public static int readint()throws IOException{in.nextToken();return (int)in.nval;} 9 public static String readstring()throws IOException{in.nextToken();return in.sval;} 10 11 public static void ad(int x,int y,int n,int[] f){for(;x<=n;x+=x&(-x))f[x]+=y;} 12 public static int sm(int x,int[] f){int y=0;for(;x>0;x-=x&(-x))y+=f[x];return y;} 13 14 public static void main(String[] args)throws IOException{ 15 int t=readint(); 16 int cas=0; 17 while(cas<t){ 18 int n=readint(); 19 int f[]=new int[n+1]; 20 for(int i=1;i<=n;i++){ 21 int x=readint(); 22 ad(i,x,n,f); 23 } 24 out.println("Case "+(++cas)+":"); 25 String s=readstring(); 26 while(s.charAt(0)!=‘E‘){ 27 int x=readint(); 28 int y=readint(); 29 if(s.charAt(0)==‘A‘)ad(x,y,n,f);else 30 if(s.charAt(0)==‘S‘)ad(x,-y,n,f);else 31 if(s.charAt(0)==‘Q‘)out.println(sm(y,f)-sm(x-1,f)); 32 s=readstring(); 33 } 34 } 35 out.flush(); 36 } 37 38 }
[shyのJAVA初探]hdu1166●树状数组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。