Cod sursa(job #3245837)

Utilizator obsidianMidnight Majesty obsidian Data 30 septembrie 2024 20:27:48
Problema Datorii Scor 0
Compilator java Status done
Runda Arhiva de probleme Marime 3.33 kb
//package datorii;

import java.io.*;

public class Main {
    static final String INPUT_FILE = "datorii.in";
    static final String OUTPUT_FILE = "datorii.out";

    public static class TokenizedReader {
        private final BufferedReader reader;
        private int currentChar;
        private String currentToken;

        TokenizedReader(String filePath) throws Exception {
            reader = new BufferedReader(new FileReader(filePath));
            currentToken = "";
            currentChar = reader.read();
        }

        private void skipWhitespace() {
            while (currentChar != -1 && Character.isWhitespace(currentChar)) {
                try {
                    currentChar = reader.read();
                } catch (IOException e) {
                    throw new RuntimeException();
                }
            }
        }

        private String nextToken() {
            currentToken = "";  // Clear the current token
            skipWhitespace();
            while (currentChar != -1 && !Character.isWhitespace(currentChar)) {
                currentToken += (char) currentChar;
                try {
                    currentChar = reader.read();
                } catch (IOException e) {
                    throw new RuntimeException();
                }
            }
            return currentToken;
        }

        private int nextInt() {
            return Integer.parseInt(nextToken());
        }

        public void close() throws IOException {
            reader.close();
        }
    }

    public static void main(String[] args) throws Exception {
       TokenizedReader reader = new TokenizedReader(INPUT_FILE);
        PrintWriter writer = new PrintWriter(OUTPUT_FILE);
        solve(reader, writer);
        reader.close();
        writer.flush();
        writer.close();
    }

    public static class FenwickTreeSum {
        private final int[] node;
        private final int n;

        public FenwickTreeSum(int n) {
            this.n = n;
            this.node = new int[n + 1];
        }

        public int querySum(int index) {
            int sum = 0;
            while (index > 0) {
                sum += node[index];
                index -= (index & (-index));
            }
            return sum;
        }

        public void update(int index, int val) {
            while (index <= n) {
                node[index] += val;
                index += (index & (-index));
            }
        }
    }

    public static void solve(TokenizedReader reader,
                             PrintWriter writer) {
        int n = reader.nextInt();
        int m = reader.nextInt();
        FenwickTreeSum fenwickTree = new FenwickTreeSum(n);
        for (int i = 1; i <= n; ++i) {
            int val = reader.nextInt();
            fenwickTree.update(i, val);
        }
        while (m-- > 0) {
            int op = reader.nextInt();
            if (op == 0) {
                int a = reader.nextInt();
                int b = reader.nextInt();
                fenwickTree.update(a, -b);
            } else if (op == 1) {
                int a = reader.nextInt();
                int b = reader.nextInt();
                writer.println(fenwickTree.querySum(b) - fenwickTree.querySum(a - 1));
            }
        }
    }
}