1412: QAQ 君临天下 || 天行九歌 [区间]
生活随笔
收集整理的這篇文章主要介紹了
1412: QAQ 君临天下 || 天行九歌 [区间]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
QAQ & 君臨天下 || 天行九歌
Description
QAQ~生活之余喜歡看一些動漫,說到國產動漫,QAQ 最喜歡的就屬玄機了,玄機出品的動漫都很贊的說,君臨天下 和 天行九歌是 QAQ 最喜歡的兩部動漫了,每次看完 QAQ 對玄機的敬佩值都會分別增加 2 與 1,QAQ 記錄了自己每天看的動漫名稱 由 A ~ Z 26個字母代替,J :代表 君臨天下,T 代表 : 天行九歌。
有一天,ORZ 突發奇想想幫 QAQ 測試一下 L ~ R 天里 QAQ 對玄機的敬佩值增加了多少,看 QAQ 能否清楚記得?
問題來了 ORZ 怎么知道 QAQ 回答的對錯呢 ?所以 ORZ 想請你幫忙算出 L ~ R 天里 QAQ 對玄機的敬佩值增加的正確答案。
Input
第一行一個 T ( 1≤T≤101≤T≤10)代表有 T 組測試數據
第二行兩個數 n ,m (1≤n,m≤1051≤n,m≤105),分別代表看了 n 天動漫,和 m 次查詢
接下來 n 行一個 A ~ Z 的字母,表示第 i 天看的動漫名稱
接下來 m 行,每行兩個數 L,R (1≤L≤R≤n1≤L≤R≤n)
Output
對于每次查詢,輸出 L~R 天里,QAQ對玄機的敬佩值增加了多少
樣例輸入
Sample Input
1 3 3 J A T 1 1 1 2 2 3Sample Output
2 2 1題解:
這個大水題放上來的唯一原因是因為暴力能艸過去的讓蒟蒻寫成樹狀數組模板TAT
AC代碼
#include <bits/stdc++.h> using namespace std; #define N 500500 int a[N], c[N]; int n, m; int lowbit(int x) {return x&(-x); } void update(int p, int x) {while(p <= n) {c[p] += x;p += lowbit(p);} } int sum(int p) {int sum = 0;while(p > 0) {sum += c[p];p -= lowbit(p);} return sum; } int main() {int T;char str[10];int u, v;int k = 0;scanf("%d",&T);while(T--) {int x;memset(a,0,sizeof(a));memset(c,0,sizeof(c));scanf("%d%d",&n,&m);for(int i = 1;i <= n; i++) {scanf("%d",&x);scanf("%s",str);if(str[0] == 'J') x = 2;else if(str[0] == 'T') x = 1;else x = 0;a[i] += x;update(i,x);}while(m--) {scanf("%d%d",&u,&v);printf("%d\n",sum(v)-sum(u-1));}} return 0; }總結
以上是生活随笔為你收集整理的1412: QAQ 君临天下 || 天行九歌 [区间]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js时间戳转换为日期字符串
- 下一篇: Computing Curricula