[shyのJAVA初探]hdu1166●树状数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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●树状数组的主要内容,如果未能解决你的问题,请参考以下文章