首页 > 代码库 > [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●树状数组