CodeForces Round #590 (Div 3)

Posted liuwenhan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces Round #590 (Div 3)相关的知识,希望对你有一定的参考价值。

1361 (+46), pupil
Rank: 1912(复兴号列车即将开动)

分析:树状数组题(比赛的时候忘了树状数组咋写了。。。)

代码:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 1e5 + 10;
 4 char s[maxn];
 5 int c[maxn][30];
 6 int len;
 7 
 8 int lowbit(int x)
 9 
10     return x & (-x);
11 
12 
13 void ini()
14 
15     for(int i = 1; i <= len; i++)
16         for(int j = i; j >= i - lowbit(i) + 1; j--)
17             c[i][s[j] - a + 1]++;
18 
19 
20 void update(int pos, char tar)
21 
22     for(int i = pos; i <= len; i += lowbit(i))
23     
24         c[i][s[pos] - a + 1]--;
25         c[i][tar - a + 1]++;
26     
27     s[pos] = tar;
28 
29 int sum(int a, int b)
30 
31     int res[30];
32     memset(res, 0, sizeof(res));
33     int ans = 0;
34     for(int i = b; i >= 1; i -= lowbit(i))
35         for(int j = 1; j <= 26; j++)
36             res[j] += c[i][j];
37     for(int i = a; i >= 1; i -= lowbit(i))
38         for(int j = 1; j <= 26; j++)
39             res[j] -= c[i][j];
40     for(int i = 1; i <= 26; i++)
41         if(res[i]) ans++;
42     return ans;
43 
44 
45 int main()
46 
47     int ope;
48     cin >> (s + 1);
49     len = strlen(s + 1);
50     int n; cin >> n;
51     ini();
52     while(n--)
53     
54         scanf("%d", &ope);
55         if(ope == 1)
56         
57             int pos; scanf("%d", &pos);
58             char x[10]; scanf("%s", x);
59             update(pos, x[0]);
60         
61         else
62         
63             int a, b;
64             scanf("%d%d", &a, &b);
65             cout << sum(a - 1, b) << endl;
66         
67     
68 

 

以上是关于CodeForces Round #590 (Div 3)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #590 (Div. 3)

Codeforces Round #590 (Div. 3) C. Pipes

Codeforces Round #590 (Div. 3)

Codeforces Round #590 (Div. 3)

CodeForces Round #590 (Div 3)

Codeforces Round #590 (Div. 3)