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 }