Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<set>
- #include<algorithm>
- #include<map>
- #include<limits>
- #include<cmath>
- #include<string>
- #include<iterator>
- #include<cstdio>
- #include<ctime>
- #include <deque>
- using namespace std;
- #define ll long long
- const long long p = 59, mod = 433494437;
- /*
- long long H(int l, int r, vector<long long> hash) {
- long long big = hash[r];
- long long small = 0;
- if (l != 0) {
- small = (hash[l - 1] * pop[r - l + 1]) % mod;
- }
- return (big - small + mod) % mod;
- } */
- int main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(0), cout.tie(0);
- set<ll> s;
- vector<ll> pw(12); pw[0] = 1;
- for (int i = 1; i < pw.size(); ++i) pw[i] = (pw[i - 1] * p)%mod;
- while (true) {
- char c; cin >> c;
- if (c == '#') break;
- string t; cin >> t;
- ll hash = 0;
- for (int i = 0; i < t.size(); ++i) {
- hash = ((hash*p)%mod + t[i]) % mod;
- }
- if (c == '+') s.insert(hash);
- else {
- if (s.find(hash) != s.end()) cout << "YES" << endl;
- else cout << "NO" << endl;
- }
- }
- return 0;
- }
- #include<iostream>
- #include<vector>
- #include<algorithm>
- #include<map>
- #include<set>
- #include<limits>
- #include<cmath>
- #include<string>
- #include<cstdio>
- using namespace std;
- int n, k;
- vector<long long > a;
- vector<long long > t;
- void build(int v, int vl, int vr) {
- if (vl == vr) {
- t[v] = a[vl];
- return;
- }
- int vm = vl + (vr - vl) / 2;
- build(2 * v + 1, vl, vm);
- build(2 * v + 2, vm + 1, vr);
- t[v] = t[2 * v + 1] + t[2 * v + 2];
- }
- long long query(int v, int vl, int vr, int l, int r) {
- if (vl > r || vr < l) {
- return 0;
- }
- if (vl >= l && vr <= r) {
- return t[v];
- }
- int vm = vl + (vr - vl) / 2;
- long long ql = query(v * 2 + 1, vl, vm, l, r);
- long long qr = query(v * 2 + 2, vm + 1, vr, l, r);
- return ql + qr;
- }
- void modify(int v, int vl, int vr, int pos, long long val) {
- if (vl == vr) {
- t[v] = val;
- return;
- }
- int vm = vl + (vr - vl) / 2;
- if (pos <= vm) {
- modify(2 * v + 1, vl, vm, pos, val);
- }
- else {
- modify(2 * v + 2, vm + 1, vr, pos, val);
- }
- t[v] = t[v * 2 + 1] + t[v * 2 + 2];
- }
- int main()
- {
- freopen("sum.in", "r", stdin);
- freopen("sum.out", "w", stdout);
- cin >> n >> k;
- a.resize(n); t.resize(n * 4);
- build(0, 0, a.size() - 1);
- for (int i = 0; i < k; ++i) {
- char c; cin >> c;
- if (c == 'A') {
- int x; cin >> x;
- long long y; cin >> y;
- modify(0, 0, a.size() - 1, x - 1, y);
- }
- else {
- int l, r; cin >> l >> r;
- cout << query(0, 0, a.size() - 1, l - 1, r - 1) << endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement