qulinxao's Journal
 
[Most Recent Entries] [Calendar View] [Friends View]

Sunday, June 9th, 2013

    Time Event
    6:04p
    homebrew и никаких деревьев фенвика (правда хэши понадобились ибо гиг интов не лезет )
    http://codeforces.ru/contest/315/problem/E  

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.*;
    public class Main {
        static int mx=(int)2<<29;//29;
        static int b=1000000000+7;
        public static void main(String[] args) {
            int n=0;
             BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            try{n=Integer.parseInt(bf.readLine());}catch(Exception e){};
            int [] a=new int[n];
            Map<Integer,Integer> m = new Hashtable<Integer, Integer>();
            Map<Integer,Integer> s = new Hashtable<Integer, Integer>();
            try{
                String[] aa=bf.readLine().split(" ");
                for(int i=0;i<n;i++){a[i]=Integer.parseInt(aa[i]);}
                while(n-->0){
                    Integer t=a[n];
                    if(!m.containsKey(t))m.put(t,0);
                    Integer oldm=m.get(t);
                    Integer su=0;
                    Integer z=t+0;
                    /*get s(t)*/while(z<mx){
                        if(!s.containsKey(z))s.put(z,0);
                        if(!m.containsKey(z))m.put(z,0);
                        su=(su+(s.get(z)+m.get(z))%b)%b;
                        z+=z&(z^(z-1));
                    }
                    Integer newm=(int)(((su+1L)*t)%b);
                    Integer up=(newm+b-oldm)%b;
                    m.put(t,newm+0);
                    /*update s of parents of t */z=t;do{
                        z=z&(z-1);
                        if(!s.containsKey(z))s.put(z,0);
                        s.put(z,(s.get(z)+up)%b);
                    }while(z>0);
                }
                System.out.println(s.get((Integer)0));
            }catch(Exception e){};
    
        }
    }
    9:47p
    к предыдушему
    оказывается это "фенвик" и есть (тока самопальный) а хеши и не нужны ибо там 10в6 а не 10в9

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.*;
    public class Main {
        static int mx=(int)2<<19;//29;
        static int b=1000000000+7;
        static long[] s=new long[mx];
        static long[] m=new long[mx];
        public static void main(String[] args) {
            int n=0,z;long d,su;
             BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            try{n=Integer.parseInt(bf.readLine());}catch(Exception e){};
            int [] a=new int[n];
            try{
                String[] aa=bf.readLine().split(" ");
                for(int i=0;i<n;i++){a[i]=Integer.parseInt(aa[i]);}
                while(n-->0){
                    d=m[z=a[n]];su=0;
                    while(z<mx){
                        su=(su+s[z]+m[z])%b;
                        z+=z&(z^(z-1));
                    }
                    z=a[n];
                    m[z]=(su+1)*z%b;
                    d=(m[z]-d+b)%b;
                    while(z>0){
                        z=z&(z-1);
                        s[z]=(s[z]+d)%b;
                    }
                }
                System.out.println(s[0]);
            }catch(Exception e){};
     
        }
    }


    <script type="text/javascript" src="http://ideone.com/api/embed.js/link/B3K4Cx"></script>

    << Previous Day 2013/06/09
    [Calendar]
    Next Day >>

About LJ.Rossia.org