Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

รหัส C ++ เพื่อตรวจสอบแบบสอบถามสำหรับ 0 sum


สมมติว่าเรามีอาร์เรย์ 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 i  n - 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,