Advertisement
Ganesh1648

Untitled

Sep 27th, 2022 (edited)
970
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.58 KB | None | 0 0
  1. /*
  2.   Goal: Become better in CP!
  3.   Key: Consistency and Discipline
  4.   Desire: SDE @ Google USA
  5.   Motto: Do what i Love <=> Love what i do
  6.   If you don't use your brain 100%, it deteriorates gradually
  7. */
  8.  
  9. import java.util.*;
  10. import java.io.*;
  11. import java.math.*;
  12.  
  13. public class A2 {
  14.  
  15.   static StringBuffer str=new StringBuffer();
  16.   static BufferedReader bf;
  17.   static PrintWriter pw;
  18.   static int n, q;
  19.   static long a[];
  20.   static long bit[];
  21.   static long mod=(long)1e9+7;
  22.   static long mod2=(long)1e9+3013;
  23.  
  24.   static long pow(long a, long b) {
  25.     long res = 1;
  26.     while (b > 0) {
  27.         if (b % 2 == 1) res = (res * a + mod2)%mod2;
  28.         a = (a * a + mod2)%mod2;
  29.         b = b >> 1l;
  30.     }
  31.     return res;
  32.   }
  33.  
  34.   static long query(int idx) {
  35.     long sum = 0;
  36.     idx++;
  37.     while (idx > 0) {
  38.         sum = (sum + bit[idx])%mod2;
  39.         idx -= (idx & (-idx));
  40.     }
  41.     return sum;
  42.   }
  43.   static void update(int idx, long v) {
  44.     idx++;
  45.     while (idx <= n) {
  46.         bit[idx] = (bit[idx] + v + mod2)%mod2;
  47.         idx += (idx & (-idx));
  48.     }
  49.   }
  50.   static void update(int l, int r, long v) {
  51.     update(l, v);
  52.     if ((r + 1) <= n) update(r + 1, -v);
  53.   }
  54.  
  55.   static void solve(int te) throws Exception{
  56.     long b[]=new long[n];
  57.     Map<Long, Long> hashMap=new HashMap<>();
  58.     // generate hash
  59.     for(int i=0;i<n;i++){
  60.       b[i]=pow(mod, a[i]-1)%mod2;
  61.       hashMap.put(b[i], hashMap.getOrDefault(b[i], 0l)+1);
  62.     }
  63.     bit=new long[n+1];
  64.     // stores hashes
  65.     for(int i=0;i<n;i++){
  66.       update(i, b[i]);
  67.     }
  68.     q=Integer.parseInt(bf.readLine().trim());
  69.     int cnt=0;
  70.     for(int i=0;i<q;i++){
  71.       int type;
  72.       String s[]=bf.readLine().trim().split("\\s+");
  73.       type=Integer.parseInt(s[0]);
  74.       if(type==1){
  75.         int idx=Integer.parseInt(s[1]);
  76.         idx--;
  77.         long val=Long.parseLong(s[2]);
  78.         hashMap.put(b[idx], hashMap.get(b[idx])-1);
  79.         update(idx, -b[idx]);
  80.         update(idx, pow(mod, val-1)%mod2);
  81.         b[idx]=pow(mod, val-1)%mod2;
  82.         hashMap.put(b[idx], hashMap.getOrDefault(b[idx], 0l)+1);
  83.       }else{
  84.         int l, r;
  85.         l=Integer.parseInt(s[1]);
  86.         r=Integer.parseInt(s[2]);
  87.         l--;
  88.         r--;
  89.         int len=r-l+1;
  90.         if(len%2==0){
  91.           continue;
  92.         }else{
  93.           for(int x=l+len/2;x<=l+len/2+1;x++){
  94.             long left=(query(x-1)-query(l-1)+mod2)%mod2;
  95.             long right=(query(r)-query(x-1)+mod2)%mod2;
  96.             long val=(x == l + len / 2 ? (right-left+mod2)%mod2 : (left-right+mod2)%mod2);
  97.             if(hashMap.getOrDefault(val, 0l)>0){
  98.               cnt++;
  99.               break;
  100.             }
  101.           }
  102.         }
  103.       }
  104.     }
  105.     str.append("Case #").append(te).append(": ").append(cnt).append("\n");
  106.   }
  107.  
  108.   public static void main(String[] args) throws java.lang.Exception {
  109.     boolean lenv=true;
  110.     int te=1;
  111.     if(lenv){
  112.       bf = new BufferedReader(
  113.                           new FileReader("input.txt"));
  114.       pw=new PrintWriter(new
  115.             BufferedWriter(new FileWriter("output.txt")));
  116.     }else{
  117.       bf = new BufferedReader(new InputStreamReader(System.in));
  118.       pw = new PrintWriter(new OutputStreamWriter(System.out));
  119.     }
  120.    
  121.     int q1 = Integer.parseInt(bf.readLine().trim());
  122.     for(te=1;te<=q1;te++) {
  123.       n=Integer.parseInt(bf.readLine().trim());
  124.       String s[]=bf.readLine().trim().split("\\s+");
  125.       a=new long[n];
  126.       for(int i=0;i<n;i++) a[i]=Long.parseLong(s[i]);
  127.       solve(te);
  128.     }
  129.     pw.print(str);
  130.     pw.flush();
  131.     // System.out.println(str);
  132.   }
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement