สมมติว่าเรามีอาร์เรย์ A ที่มี n องค์ประกอบ องค์ประกอบอยู่ในช่วง -1 ถึง 1 และมีอีกอาร์เรย์ของคู่สำหรับ m แบบสอบถาม Q เช่น Q[i] =(li, ri) การตอบกลับแบบสอบถามจะเป็น 1 เมื่อองค์ประกอบของอาร์เรย์ a สามารถจัดเรียงใหม่ได้ดังนั้นเป็นผลรวม Q[li] + ... + Q[ri] =0 มิฉะนั้น 0 เราต้องหาคำตอบของคำถามทั้งหมด
ดังนั้น หากอินพุตเป็น A =[-1, 1, 1, 1, -1]; Q =[[1, 1], [2, 3], [3, 5], [2, 5], [1, 5]] จากนั้นผลลัพธ์จะเป็น [0, 1, 0, 1, 0]
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
n :=size of Am :=size of Qz :=0for initialize , i :=0 when in - z แล้ว:z :=n - zfor initialize i :=0 when i ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#includeใช้เนมสเปซ std;void แก้ปัญหา(vector A, vector > Q){ int n =A.size(); int m =Q.size(); int z =0; สำหรับ (int a, i =0; i n - z) z =n - z; สำหรับ (int i =0; i A ={ -1, 1, 1, 1, -1 }; เวกเตอร์<เวกเตอร์ > Q ={ { 1, 1 }, { 2, 3 }, { 3, 5 }, { 2, 5 }, { 1, 5 } }; แก้(A, Q);} อินพุต
<ก่อน>{ -1, 1, 1, 1, -1 }, { { 1, 1 }, { 2, 3 }, { 3, 5 }, { 2, 5 }, { 1, 5} }ก่อน>ผลลัพธ์
1, 0, 1, 0, 1,