ural 1613

题目:http://acm.timus.ru/problem.aspx?space=1&num=1613

题意:给出N 个数,然后给出询问区间,并给出询问的数,问这个数是不是存在

hash还是很好想的,然后如果再能想到优化,就没问题了

View Code
 1 typedef long long ll;
 2 const int N = 100008;
 3 const int mod = 100007;
 4 struct node
 5 {
 6     int data;
 7     int id;
 8 };
 9 vector<node>mark[N];
10 int a[N];
11 int main()
12 {
13     int i;
14     int n,q;
15     int s,e,x;
16     node tem;
17     //freopen("data.txt","r",stdin);
18     while(scanf("%d",&n) != EOF)
19     {
20         for(i = 1; i <= n; i++)
21         {
22             scanf("%d",&x);
23             a[i] = x;  // 预存这些数
24             tem.data = x;
25             tem.id = i;
26             mark[x % mod].push_back(tem);
27         }
28         scanf("%d",&q);
29         while(q--)
30         {
31             scanf("%d%d%d",&s,&e,&x);
32             //cout<<"a[x] = "<<a[s]<<endl;
33             if(a[s] == x || a[e] == x)  // 首先判断一下,就是这个优化,如果不加就是 TLE 了
34             {
35                 printf("1");
36                 continue;
37             }
38             int flag = 0;
39             int temp = x % mod;
40             int kem = mark[temp].size();
41             for(i = 0; i < kem; i ++)
42             {
43                 if(mark[temp][i].data == x && mark[temp][i].id >= s && mark[temp][i].id <= e)
44                 {
45                     flag = 1; break;
46                 }
47             }
48             if(flag) printf("1");
49             else printf("0");
50         }
51         printf("\n");
52     }
53     return 0;
54 }
原文地址:https://www.cnblogs.com/fxh19911107/p/2676338.html