B. Love Song

Petya once wrote a sad love song and shared it to Vasya. The song is a string consisting of lowercase English letters. Vasya made up qq questions about this song. Each question is about a subsegment of the song starting from the ll-th letter to the rr-th letter. Vasya considers a substring made up from characters on this segment and repeats each letter in the subsegment kk times, where kk is the index of the corresponding letter in the alphabet. For example, if the question is about the substring "abbcb", then Vasya repeats letter 'a' once, each of the letters 'b' twice, letter 'c" three times, so that the resulting string is "abbbbcccbb", its length is 1010. Vasya is interested about the length of the resulting string.

Help Petya find the length of each string obtained by Vasya.

Input

The first line contains two integers nn and qq (1≤n≤1000001≤n≤100000, 1≤q≤1000001≤q≤100000) — the length of the song and the number of questions.

The second line contains one string ss — the song, consisting of nn lowercase letters of English letters.

Vasya's questions are contained in the next qq lines. Each line contains two integers ll and rr (1≤l≤r≤n1≤l≤r≤n) — the bounds of the question.

Output

Print qq lines: for each question print the length of the string obtained by Vasya.

Examples

input

7 3

abacaba

1 3

2 5

1 7

output

4
7
11

input

13 7
sonoshikumiwo
1 5
2 10
7 7
1 13
4 8
2 5
3 9

output

82
125
9
191
62
63
97

题目大意:将字符串中的字符重复特定次数后输出字符串长度,以题可知a重复一次,b两次,c三次……(并不是第几个出现就重复几次)

思路:应用前缀和,通过ascii码计算次数

#include<iostream>

using namespace std;

const int N = 100010;

string a;
int n, q, c, b;
int arr[N];

int main()
{
    cin >> n >> q;
    cin >> a;

    for(int i = 0; i < n; i ++)
    {
        arr[i] = arr[i - 1] + (a[i] - 'a' + 1);
    }

    while(q --)
    {
        cin >> c >> b;
        cout << arr[b - 1] - arr[c - 2] << endl;
         //因打表时下标从0开始
    }

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值