
分析
问一个集合是否相同可以用 元素的立方和
表示这个集合
本质上是 hash
处理一下询问即可
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| int cal(int x) {return x*x*x;}
signed main() { _orz; int n; cin>>n; vector<int> a(n+1),b(n+1); vector<int> s1(n+1),s2(n+1); map<int,int> mp; for(int i = 1;i <= n;i++) cin >> a[i]; for(int i = 1;i <= n;i++) cin >> b[i]; for(int i = 1;i <= n;i++){ if(!mp[a[i]]){ s1[i] = s1[i-1] + cal(a[i]); mp[a[i]] = 1; } else s1[i] = s1[i-1]; }
mp.clear(); for(int i = 1;i <= n;i++){ if(!mp[b[i]]){ s2[i] = s2[i-1] + cal(b[i]); mp[b[i]] = 1; } else s2[i] = s2[i-1]; } int q;cin>>q; while(q--){ int l,r; cin>>l>>r; if(s1[l] == s2[r]) puts("Y"); else puts("N"); } return 0; }
|