Bài đăng

Đang hiển thị bài đăng từ Tháng 6, 2020

Unique in C++

#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn (ll) (3e4+5) ll i ,n,x; vector<ll> v; vector<ll>::iterator it; int main(){     cin>>n;     for(i=0;i<n;i++){         cin>>x;         v.push_back(x);     }     it = unique(v.begin(),v.end());     v.resize(distance(v.begin(),it));     cout<<v.size();     return 0;     } /*   vector< int > v = { 1, 1, 3, 3, 3, 10, 1, 3, 3, 7, 7, 8 } -> 1 3 10 1 3 7 8 */

Phi 1 số và UCLN

ll gcd ( ll a , ll b ){ if ( a == 0 || b == 0 ) return a + b ; if ( a == b ) return a ; return gcd ( b , a % b ); } ll phi ( ll n ){ ll ans = n ; ll d = 2 , dem ; while ( d * d <= n ){ dem = 0 ; while ( n % d == 0 ){ n /= d ; dem ++; } if ( dem > 0 ) ans -= ans / d ; d ++; } if ( n > 1 ) ans -= ans / n ; return ans ; }

VỊ TƯỚNG TÌNH BÁO KHÔNG MANG QUÂN HÀM: NGƯỜI THẦY CỦA CÁC BẬC THẦY

VỊ TƯỚNG TÌNH BÁO KHÔNG MANG QUÂN HÀM: NGƯỜI THẦY CỦA CÁC BẬC THẦY Giữa tháng 3-2014, Trại sáng tác Văn học đề tài "Vì An ninh Tổ Quốc và Bình yên cuộc sống" do  Bộ Công An và Hội Nhà văn Việt nam đồng tổ chức tại Đà Lạt bất ngờ được đón một vị khách đặc biệt đến nói chuyện. Ông là nhà tổ chức tình báo huyền thoại Trần Quốc Hương, nguyên UVTW Đảng, nguyên Trưởng Ban Nội Chính Trung ương. Khi đó, ông đã 90 tuổi. Người nhỏ, hao gầy, đầu đội mũ len mỏng, ông đến Trại viết bằng xe lăn. Ông không lên bục, các nhà văn dự trại kẻ đứng người ngồi vây quanh, háo hức và say mê nghe ông nói chuyện bằng giọng đã không tròn, chậm nhưng vẫn rõ, suốt 2 giờ liền. Ông mở đầu: "Chúng ta không nên đề cập đến công tác an ninh bằng cách nói về lực lượng an ninh, về chiến công. Tốt nhất, chúng ta nên tìm hiểu kỹ về đối phương. Đừng bao giờ đánh giá thấp đối thủ, hãy tôn trọng họ. Biện pháp, cách thức đấu tranh, đấu trí chỉ mở ra khi ta hiểu rõ họ, còn đối phương thì tin ta nói thật, tôn

Competitive Programming Extension for VSCode

https://codeforces.com/blog/entry/71386

Học về Segment Tree

Hình ảnh
Segment Tree được sử dụng trong trường hợp có nhiều truy vấn phạm vấn phạm vi trên mảng và sửa đổi các phần tử của cùng một mảng. Ví dụ, tìm tổng của tất cả các phần tử trong một mảng từ chỉ số L đến R, hoặc tìm giá trị nhỏ nhất của tất cả các phần tử trong 1 mảng từ chỉ số L đến R. Những vấn đề này có thể được giải quyết dễ dàng với một trong những cấu trúc dữ liệu linh hoạt nhất. Segment Tree. Segment Tree là gì ? Segment Tree cơ bản là một cây nhị phân nhằm lưu trữ một đoạn. Mỗi nút trong Segment Tree đại diện cho một đoạn. Xét mảng A có kích thước N, và 1 cây Segment Tree T tương ứng. 1. Gốc của cây T sẽ đại diện cho cả mảng: A[0:N-1]. 2. Mỗi lá của cây T sẽ đại diện một phần tử A[i] thỏa mãn 0<=i<N. 3. Mỗi nút nút của cây T đại diện cho một đoạn A[i:j] với 0<=i<j<N. Gốc của Segment Tree đại diện cho cả mảng A[0:N-1]. Sau đó nó chia đôi thành một nữa và 2 đứa trẻ của gốc sẽ đại diện cho A[0:(N-1)/2]  và A[(N-1)/2+1;(N-1)]. Vì vậy, ở mỗi bước, Segment lại chi

Tinh phi trong BIT

``` #include < bits / stdc ++. h > using namespace std ; #define ll long long #define maxn ( ll )( 1e6 + 5 ) #define mod ( ll )( 1e9 + 7 ) ll BIT [ maxn ], a [ maxn ], n , q , i ; ll phi [ maxn ], f [ maxn ]; bitset <maxn> num ; vector <ll> primes ; void phi_cal (){ phi [ 1 ]= 1 ; for ( ll i = 2 ; i < maxn ; i ++){ if (! num [ i ]){ phi [ i ]= i - 1 ; primes . push_back ( i ); } for ( ll j = 0 ; j < primes . size (); j ++){ ll x = i * primes [ j ]; if ( x >= maxn ) break ; num . set ( x ); if ( i % primes [ j ]== 0 ){ phi [ x ]= phi [ i ]* primes [ j ]; break ; } else { phi [ x ]= phi [ i ]*( primes [ j ]- 1 ); } } } } void pre_cal (){ for ( ll i = 1 ; i < maxn ; i ++){ for ( ll j = i , cnt = 1 ; j < maxn ; j += i , cnt += 1 ){ f [ j ]+= i * phi [ cnt ]; } }

Chuyên đề về BIT (Binary Index Tree)

Hình ảnh
Binary Indexed Tree còn gọi là Fenwick Tree cung cấp 1 cách để biểu diễn 1 mảng các số trong 1 mảng, cho phép tổng tiền tố được tính một cách hiệu quả. Ví dụ, 1 mảng [2,3,-1,0,6] được cho, thì tổng tiền tố của 3 phần tử đầu tiên [2,3,-1] là 2+3+(-1)=4. Tính tổng tiền tố một cách hiệu quả là hữu ích trong nhiều hoàn cảnh. Chúng ta hãy bắt đầu với 1 ví dụ đơn giản. Cho 1 mảng a[], và 2 loại phép toán được biểu diễn trên nó. 1. Thay đổi giá trị được lưu tại chỉ số i. (Cái này được gọi là phép toán update điểm). 2. Tìm tổng một tổng của 1 tiền tố có độ dài là k (Cái này được gọi là truy vấn range sum). Một cách tiếp cận theo kiểu implement là: ``` int a [] = { 2 , 1 , 4 , 6 , - 1 , 5 , - 32 , 0 , 1 }; void update ( int i , int v ) //assigns value v to a[i] { a [ i ] = v ; } int prefixsum ( int k ) //calculate the sum of all a[i] such that 0 <= i < k { int sum = 0 ; for ( int i = 0 ; i < k ; i ++) sum += a [ i ]