2013-03-05 9 views
5

के अंदर अंकों की कुल संख्या की गणना करना 2 मंडलियां हैं और उनके केंद्र तय किए गए हैं और उन्हें इनपुट के रूप में दिया जाएगा। फिर एन अंक होंगे, जिनमें से एक्स और वाई समन्वय इनपुट के रूप में दिए जाते हैं।2 सर्कल

अंत में, प्रश्न पूछे जाएंगे। प्रत्येक क्वेरी के लिए, दो मंडलियों का त्रिज्या (उन्हें आर 1 और आर 2 होने दें) दिया जाएगा। पहले सर्कल के अंदर बिंदुओं की कुल संख्या या प्रत्येक क्वेरी के लिए दूसरा सर्कल आउटपुट करें। एक बिंदु एक सर्कल के अंदर स्थित है यदि बिंदु से केंद्र तक की दूरी सर्कल के त्रिज्या से कम या बराबर है।

बाधाएं: एन, क्यू < = 10^6 आर 1, आर 2 < = 10^7 और प्रत्येक समन्वय के लिए, x | और | वाई | < = 10^6

मैं एक ओ (nlogn) या ओ (nlog^2n) preprocessing और फिर ओ (लॉगन) एल्गोरिदम प्रति क्वेरी की तलाश में हूं। ओ (एन) प्रति प्रश्न समाधान बहुत धीमा है। कोई विचार यह कैसे क्रैक करने के लिए?

+1

दो सरणी बनाएं जो उनकी दूरी के अनुसार अंक रैंक करते हैं। यह सॉर्टिंग के लिए ओ (एन लॉग (एन)) लेता है। फिर संबंधित सर्कल में अंतिम बिंदु खोजने के लिए दोनों सरणी में प्रति क्वेरी एक बाइनरी खोज करें। यह ओ लेता है (लॉग (एन))। –

+1

यदि कोई बिंदु दोनों सर्कल के अंदर स्थित है तो इसे दो बार गिना जाएगा – user2040997

उत्तर

2

सी 1, सी 2 डिस्क के केंद्र बनने दें। चलो पीआई, मैं = 1 ... एन, अंक बनो। Qj, j = 1 ... q, j-th क्वेरी, Qj = (qj1, qj2) दें।

  1. प्रत्येक बिंदु पाई के लिए, गणना घ (पाई, सी), कश्मीर = 1 या 2. एक क्रमबद्ध मल्टीमैप में यह रखो: एमके (घ (पाई, सी)) पाई हैं। यह ओ (nlogn) में किया जा सकता है (यह वास्तव में दूरी की सूची क्रमबद्ध करने की तरह है)।
  2. प्रत्येक क्वेरी के लिए Qj, एमके की चाबियों पर qjk के लिए बाइनरी खोज करें, जो ओ (लॉग इन) में किया जा सकता है।
  3. प्रत्येक प्रश्न QJ के लिए, उन कुंजी पर मल्टीमैप के मानों का संघ लें जो ऊपर पाए गए किसी के बराबर या उसके बराबर हैं।
+1

यूनियन चरण कितनी तेज़ है? आर 1 के बड़े मूल्यों के लिए, आर 2 यह ओ (एन) नहीं होगा? –

+1

मैं ओ (लॉग इन) में मल्टीमैप के मानों का संघ कैसे ले सकता हूं? मेरा मानना ​​है कि यह ओ (एन) को सबसे खराब मामले में ले सकता है। – user2040997

+0

@ user2040997 मुझे विश्वास है कि यह विलय प्रकार का (संघ) सर्वोत्तम परिदृश्य है। – SparKot

4

हे के साथ समाधान (लॉग ऑन एन) क्वेरी समय।

  1. यह दोनों मंडलियों से बाहर के अंक गिनती करने के लिए प्रत्येक क्वेरी के लिए आसान है, तो अंकों की कुल संख्या से परिणाम घटाना।
  2. कार्टेशियन निर्देशांक का उपयोग करना आसान है। तो एक्स सी 1, वाई से दूरी होगी - सी 2 से दूरी। इस मामले में हमें केवल X > r1 && Y > r2 क्षेत्र में अंकों की संख्या खोजने की आवश्यकता है।
  3. प्रत्येक बिंदु पर मान "1" असाइन करें। अब हमें केवल दिए गए क्षेत्र में मूल्यों का योग ढूंढना होगा। 1 डी मामले में यह फेनविक पेड़ के साथ किया जा सकता है। लेकिन 2 डी फेनविक पेड़ का उपयोग होने पर 2 डी केस बहुत अलग नहीं है।
  4. 2 डी फेनविक पेड़ को बहुत अधिक जगह पर कब्जा करना चाहिए (10 दिए गए बाधाओं के साथ मूल्य)। लेकिन फेनविक पेड़ के लिए 2 डी सरणी बहुत अस्पष्ट है, इसलिए हम अपने मूल्यों को स्टोर करने के लिए हैश मानचित्र का उपयोग कर सकते हैं और ओ (एन लॉग एन) में अंतरिक्ष आवश्यकताओं (और प्री-प्रोसेसिंग समय) को कम कर सकते हैं।
+0

+1: यह अच्छा लग रहा है।यदि आप वाई को बढ़ाकर प्रश्नों को क्रमबद्ध करते हैं और धीरे-धीरे फेनविक पेड़ में अंक डालते हैं तो आप एक्स पर केवल 1 डी फेनविक पेड़ से दूर हो सकते हैं। –

+0

यह अच्छा लग रहा है। लेकिन मैं इतनी बड़ी बाधा के साथ 2 डी फेनविक पेड़ को कैसे कार्यान्वित कर सकता हूं? यदि दूरी हमेशा एक पूर्णांक थी तो आपका विचार पर्याप्त होगा। लेकिन दूरी हमेशा एक पूर्णांक नहीं हो सकती है। उस स्थिति में यदि हम दूरी के वर्ग के साथ काम करते हैं, तो फेनविक पेड़ को 10^12 * 10^12 स्पेस की आवश्यकता होगी। भले ही यह अस्पष्ट होगा, मुझे नहीं लगता कि यह पर्याप्त होगा? – user2040997

+0

@ user2040997: फेनविक पेड़ का प्रत्येक आयाम प्रत्येक बिंदु के लिए एन मानों को लॉग करने के लिए अद्यतन करता है। जिसका मतलब है कि हैश मानचित्र को एन * लॉग^2 (एन) मानों तक स्टोर करना चाहिए, दिए गए बाधाओं के लिए इसका मतलब 400 मिलियन मूल्य है। वैसे, यह संख्या एक्स, वाई के लिए बाधाओं पर निर्भर नहीं है। यदि आपको ऑनलाइन प्रश्नों का उत्तर देने की आवश्यकता नहीं है, तो आप पीटर डी रिवाज़ द्वारा सुझाए गए 1 डी फेनविक पेड़ का उपयोग कर सकते हैं। इस मामले में हैश मानचित्र की आवश्यकता नहीं है। आकार एन का ऐरे 1 डी फेनविक पेड़ के लिए पर्याप्त है (क्योंकि केवल एन अलग दूरी हैं)। [यह उत्तर] (http://stackoverflow.com/a/15198176/1009831) 1 डी मामले के लिए कुछ और विवरण देता है। –

संबंधित मुद्दे