Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan C++, terjemah yang berikut ke dalam bahasa Cina: Pertanyaan untuk bitwise DAN dalam julat indeks tatasusunan yang diberikan

Menggunakan C++, terjemah yang berikut ke dalam bahasa Cina: Pertanyaan untuk bitwise DAN dalam julat indeks tatasusunan yang diberikan

王林
王林ke hadapan
2023-08-27 19:45:031379semak imbas

Menggunakan C++, terjemah yang berikut ke dalam bahasa Cina: Pertanyaan untuk bitwise DAN dalam julat indeks tatasusunan yang diberikan

Dalam artikel ini kita diberi masalah di mana diberikan susunan integer tugas kita adalah untuk mencari bitwise DAN julat yang diberikan cth. Jika kerumitan masa kami tidak cukup baik, kami cuba membangunkan kaedah yang lebih baik.

Kaedah Brute Force

Dalam kaedah yang diberikan, kami akan mengulangi julat yang diberikan dan mencari jawapan kaedah kami dan mencetaknya.

Contoh

Input: arr[ ] = {1, 3, 1, 2, 32, 3, 3, 4, 4}, q[ ] = {{0, 1}, {3, 5}}
Output:
1
0 0
1 AND 31 = 1
23 AND 34 AND 4 = 00
Input: arr[ ] = {1, 2, 3, 4, 510, 10 , 12, 16, 8}, q[ ] = {{0, 42}, {1, 33, 4}}
Output:
0 8
0

Output

#include <bits/stdc++.h>
using namespace std;
int main() {
   int ARR[] = { 10, 10 , 12, 16, 8 };
   int n = sizeof(ARR) / sizeof(int); // size of our array
   int queries[][2] = { {0, 2}, {3, 4} }; // given queries
   int q = sizeof(queries) / sizeof(queries[0]); // number of queries
   for(int i = 0; i < q; i++) { // traversing through all the queries
      long ans = 1LL << 32;
      ans -= 1; // making all the bits of ans 1
      for(int j = queries[i][0]; j <= queries[i][1]; j++) // traversing through the range
         ans &= ARR[j]; // calculating the answer
      cout << ans << "\n";
   }
   return 0;
}

Dalam pendekatan ini kami menjalankan gelung pada setiap julat pertanyaan dan mencetak setnya secara bitwise, jadi kerumitan keseluruhan program kami menjadi

O(N*Q )

, dengan N ialah saiz tatasusunan dan Q ialah bilangan pertanyaan yang kami ada sekarang, anda dapat melihat bahawa kerumitan ini tidak membawa kepada kekangan yang lebih tinggi, jadi kami akan menghasilkan kaedah yang lebih pantas untuk masalah ini. Kaedah yang cekap

Dalam masalah ini, kami mengira bilangan bit awalan tatasusunan dan mengira bitwise DAN julat yang diberikan dengan menyemak sumbangan bit set dalam julat yang diberikan. . saiz tatasusunan yang diberikan. Prosedur ini juga boleh disesuaikan dengan kekangan yang lebih tinggi. h2>

Penjelasan kod di atas

Dalam kaedah ini kita mengira semua digit awalan dan menyimpannya dalam indeks. Sekarang, apabila kita mengira pertanyaan, kita hanya perlu menyemak sama ada kiraan bit tertentu adalah sama dengan bilangan elemen yang terdapat dalam julat. Jika ya, kita tetapkan bit ini kepada 1 dalam x, jika tidak, kita biarkan bit itu seolah-olah mana-mana nombor yang hadir dalam julat yang diberikan mempunyai bit itu 0, jadi keseluruhan bitwise DAN bit itu akan menjadi sifar, Beginilah kita mengira bitwise DAN.

Kesimpulan

Dalam artikel ini kami menyelesaikan masalah menghitung semua pertanyaan bitwise DAN dalam julat indeks tertentu [L, R] dalam kumpulan besar. Kami juga mempelajari program C++ untuk menyelesaikan masalah ini dan cara lengkap untuk menyelesaikan masalah ini (biasa dan cekap). Kita boleh menulis program yang sama dalam bahasa lain seperti C, java, python dan bahasa lain. Kami berharap artikel ini dapat membantu anda.

Atas ialah kandungan terperinci Menggunakan C++, terjemah yang berikut ke dalam bahasa Cina: Pertanyaan untuk bitwise DAN dalam julat indeks tatasusunan yang diberikan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam