[java線段樹]2015上海邀請賽 D Doom

來源:互聯網
上載者:User

標籤:

題意:n個數 m個詢問

        每個詢問[l, r]的和, 再把[l, r]之間所有的數變為平方(模為9223372034707292160LL)

 

很明顯的線段樹

看到這個模(LLONG_MAX為9223372036854775807) 很明顯平方時會爆LL

很容易發現所有數平方模了幾次之後值就不再改變了 而且這個“幾次”相當小 因此直接暴力搞就好了

 

    public static void main(String[] args)    {        Scanner in = new Scanner(System.in);        BigInteger a=BigInteger.valueOf(2);     //   這裡看的是2的平方        Long b=9223372034707292160L;        BigInteger mod=new BigInteger(b.toString());        for(int i=1;i<=40;i++)        {            a=a.multiply(a).mod(mod);            System.out.println(i + ":" + a);     //  平方i次之後的值        }    }

 

  1 import java.io.*;  2 import java.util.*;  3 import java.math.*;  4 import java.nio.charset.StandardCharsets;  5   6 public class Main  7 {  8     static BigInteger li=BigInteger.ZERO;  9     static Long b=9223372034707292160L; 10     static BigInteger mod=new BigInteger(b.toString()); 11     static BigInteger[] sum=new BigInteger[200005]; 12     static boolean[] num=new boolean[200005]; 13     static InputReader in = new InputReader(); 14     public static void pushup(int rt) 15     { 16         sum[rt]=(sum[rt*2].add(sum[rt*2+1])).mod(mod); 17         num[rt]=num[rt*2]&num[rt*2+1]; 18     } 19     public static void build(int l, int r, int rt) 20     { 21         if(l==r) 22         { 23             sum[rt]=in.nextBigInteger(); 24             num[rt]=false; 25             return ; 26         } 27         int m=(l+r)/2; 28         build(l, m, rt*2); 29         build(m+1, r, rt*2+1); 30         pushup(rt); 31     } 32     public static BigInteger query(int L, int R, int l, int r, int rt) 33     { 34         if(L<=l && r<=R) 35             return sum[rt]; 36         int m=(l+r)/2; 37         BigInteger ret=li; 38         if(L<=m) 39             ret=ret.add(query(L, R, l, m, rt*2)).mod(mod); 40         if(R>m) 41             ret=ret.add(query(L, R, m+1, r, rt*2+1)).mod(mod); 42         return ret.mod(mod); 43     } 44     public static void update(int p, int l, int r, int rt) 45     { 46         if(l==r) 47         { 48             BigInteger cur=(sum[rt].multiply(sum[rt])).mod(mod); 49             if(sum[rt].equals(cur)) 50                 num[rt]=true; 51             sum[rt]=cur; 52             return ; 53         } 54         int m=(l+r)/2; 55         if(p<=m) 56             update(p, l, m, rt*2); 57         else  58             update(p, m+1, r, rt*2+1); 59         pushup(rt); 60     } 61     static int n; 62     public static void update(int L, int R, int l, int r, int rt) 63     { 64         if(L<=l && r<=R) 65         { 66             if(num[rt]) 67                 return ; 68             if(l==r) 69                 update(l, 1, n, 1); 70             else  71             { 72                 int mm=(l+r)/2; 73                 update(L, R, l, mm, rt<<1); 74                 update(L, R, mm+1, r, rt<<1|1); 75             } 76              77             return ; 78         } 79         int m=(l+r)/2; 80         if(L<=m) 81             update(L, R, l, m, rt*2); 82         if(R>m) 83             update(L, R, m+1, r, rt*2+1); 84         pushup(rt); 85     } 86     public static void main(String[] args) 87     { 88         int t, ca=1; 89         t=in.nextInt(); 90         while((t--)!=0) 91         { 92             n=in.nextInt(); 93             int m=in.nextInt(); 94             build(1, n, 1); 95             System.out.println("Case #" + ca + ":"); 96             ca++; 97             BigInteger ans=li; 98             while((m--)!=0) 99             {100                 int l, r;101                 l=in.nextInt();102                 r=in.nextInt();103                 ans=ans.add(query(l, r, 1, n, 1)).mod(mod);104                 System.out.println(ans);105                 update(l, r, 1, n, 1);106             }107         }108     }109 }
View Code

 

[java線段樹]2015上海邀請賽 D Doom

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.