Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Goal: Become better in CP!
- Key: Consistency and Discipline
- Desire: SDE @ Google USA
- Motto: Do what i Love <=> Love what i do
- If you don't use your brain 100%, it deteriorates gradually
- */
- import java.util.*;
- import java.io.*;
- import java.math.*;
- public class A2 {
- static StringBuffer str=new StringBuffer();
- static BufferedReader bf;
- static PrintWriter pw;
- static int n, q;
- static long a[];
- static long bit[];
- static long mod=(long)1e18+3;
- static int N=(int)1e6+7;
- static Map<Long, Long> z, zz;
- static Random random;
- static void templateSortArray(long a[]) {
- int n=a.length;
- List < Long > l = new ArrayList < > ();
- for (int i = 0; i < n; i++) l.add(a[i]);
- Collections.sort(l);
- for (int i = 0; i < n; i++) a[i] = l.get(i);
- }
- static long myRand(long mod){
- return random.nextLong()%mod;
- }
- static void pre(){
- z=new HashMap<>();
- random=new Random(5);
- for (long i = 0; i < N; i++) {
- long val=myRand(mod);
- z.put(i, val);
- }
- }
- static long query(int idx) {
- long sum = 0;
- idx++;
- while (idx > 0) {
- sum = (sum + bit[idx])%mod;
- idx -= (idx & (-idx));
- }
- return sum;
- }
- static void update(int idx, long v) {
- idx++;
- while (idx <= n) {
- bit[idx] = (bit[idx] + v + mod)%mod;
- idx += (idx & (-idx));
- }
- }
- static void update(int l, int r, long v) {
- update(l, v);
- if ((r + 1) <= n) update(r + 1, -v);
- }
- static void solve(int te) throws Exception{
- zz=new HashMap<>();
- bit=new long[n+1];
- // stores hashes
- for(int i=0;i<n;i++){
- update(i, z.get(a[i]));
- zz.put(z.get(a[i]), zz.getOrDefault(z.get(a[i]), 0l)+1);
- }
- q=Integer.parseInt(bf.readLine().trim());
- int cnt=0;
- for(int i=0;i<q;i++){
- int type;
- String s[]=bf.readLine().trim().split("\\s+");
- type=Integer.parseInt(s[0]);
- if(type==1){
- int idx=Integer.parseInt(s[1]);
- idx--;
- int val=Integer.parseInt(s[2]);
- zz.put(z.get(a[idx]), zz.get(z.get(a[idx]))-1);
- update(idx, -z.get(a[idx]));
- a[idx]=val;
- update(idx, z.get(a[idx]));
- zz.put(z.get(a[idx]), zz.getOrDefault(z.get(a[idx]), 0l)+1);
- }else{
- int l, r;
- l=Integer.parseInt(s[1]);
- r=Integer.parseInt(s[2]);
- l--;
- r--;
- int len=r-l+1;
- if(len%2==0){
- continue;
- }else{
- for(int x=l+len/2;x<=l+len/2+1;x++){
- long left=(query(x-1)-query(l-1)+mod)%mod;
- long right=(query(r)-query(x-1)+mod)%mod;
- long val=(x == l + len / 2 ? (right-left+mod)%mod : (left-right+mod)%mod);
- if(zz.getOrDefault(val, 0l)>0){
- cnt++;
- break;
- }
- }
- }
- }
- }
- str.append("Case #").append(te).append(": ").append(cnt).append("\n");
- }
- public static void main(String[] args) throws java.lang.Exception {
- boolean lenv=true;
- int te=1;
- if(lenv){
- bf = new BufferedReader(
- new FileReader("input.txt"));
- pw=new PrintWriter(new
- BufferedWriter(new FileWriter("output.txt")));
- }else{
- bf = new BufferedReader(new InputStreamReader(System.in));
- pw = new PrintWriter(new OutputStreamWriter(System.out));
- }
- pre();
- int q1 = Integer.parseInt(bf.readLine().trim());
- for(te=1;te<=q1;te++) {
- n=Integer.parseInt(bf.readLine().trim());
- String s[]=bf.readLine().trim().split("\\s+");
- a=new long[n];
- for(int i=0;i<n;i++) a[i]=Long.parseLong(s[i]);
- solve(te);
- }
- pw.print(str);
- pw.flush();
- // System.out.println(str);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement