2016"百度之星" - 资格赛(Astar Round1) A

链接:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=690&pid=1001
我用线段树过的~可能要注意a,b的关系
 1 #include<stdio.h>
 2 //#include<bits/stdc++.h>
 3 #include<string.h>
 4 #include<iostream>
 5 #include<math.h>
 6 #include<sstream>
 7 #include<set>
 8 #include<queue>
 9 #include<map>
10 #include<vector>
11 #include<algorithm>
12 #include<limits.h>
13 #define inf 0x7fffffff
14 #define INFL 0x7fffffffffffffff
15 #define lson l,m,rt<<1
16 #define rson m+1,r,rt<<1|1
17 #define LL long long
18 #define ULL unsigned long long
19 const int N = 200005;
20 const int MOD = 9973;
21 using namespace std;
22 int num[N];
23 int ans;
24 char c[N];
25 struct node
26 {
27     int left;
28     int right;
29     int value;
30 }tree[N*4];
31 void sum(int rt)
32 {
33     tree[rt].value = (tree[rt*2].value*tree[rt*2+1].value)%MOD;
34 }
35 void build(int l,int r,int rt)
36 {
37     tree[rt].left=l;
38     tree[rt].right=r;
39     int m=(l+r)>>1;
40     if(l==r)
41     {
42         tree[rt].value=num[l];
43         return;
44     }
45     build(lson);
46     build(rson);
47     tree[rt].value=(tree[rt*2].value*tree[rt*2+1].value)%MOD;
48 }
49 void query(int l,int r,int rt)
50 {
51     if(l==tree[rt].left&&r==tree[rt].right)
52     {
53         ans=(ans*tree[rt].value)%MOD;
54         return ;
55     }
56     int m=(tree[rt].left+tree[rt].right)>>1;
57      if(r<=m)
58         query(l,r,rt*2);
59     else if(l>m)
60         query(l,r,rt*2+1);
61     else
62     {
63         query(l,m,rt*2);
64         query(m+1,r,rt*2+1);
65     }
66 }
67 int main()
68 {
69     int t;
70     while(~scanf("%d",&t))
71     {
72         scanf("%s",c);
73         int len=strlen(c);
74         for(int i=0;i<len;i++)
75         {
76             num[i+1]=c[i]-28;
77         }
78         build(1,N,1);
79         for(int i=0;i<t;i++)
80         {
81             ans=1;
82             int l,r;
83             scanf("%d%d",&l,&r);
84             if(l>r)
85             {
86                 swap(l,r);
87             }
88             query(l,r,1);
89             printf("%d\n",ans);
90         }
91     }
92     return 0;
93 }

 

posted @ 2016-05-15 09:10  樱花落舞  阅读(270)  评论(0编辑  收藏  举报