Đếm số cặp có hiệu nhỏ hơn k trong mảng
hiện tại e đang bị quá time : https://www.ideone.com/jJqbbE
các a sửa giúp e hoặc cho e ý tưởng cách làm khác
1 Like
Sắp xếp lại trước rồi dùng hai trỏ, một trỏ vào ngay đầu và một trỏ vào số tiếp theo trong khoảng k bước. Dùng sentinel để giảm sự phức tạp của điều kiện.
7 Likes
cái này sử dụng lower_bound() để tìm đúng ko a?
a ơi,bài e thiếu gì mà bị gắn cờ thế a
Dư chứ không thiếu.
Dư từ: “code mẫu”. Nó bằng với “làm giùm” đấy. Mà ban đầu, bạn cần ý tưởng.
4 Likes
Nên tìm tuyến tính trước để thấy rõ các trường hợp có thể xảy ra.
5 Likes
e có nói code mẫu à anh ơi
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n,x;
cin>>n>>x;
int a[n+5],check[10000+5] = {0};
long long dem=0;
for(int i=0;i<n;i++){
cin>>a[i];
check[a[i]]=1;
}
stable_sort(a,a+n);
for(int i=0;i<n-1;i++){
int temp = a[i] + x;
int c;
int temp2 = lower_bound(a,a+n,temp)-a;
c = temp2 - i-1;
if(c>=1){
dem+=c;
}
}
cout<<dem<<endl;
}
}
ban co the tham khao
Mảng toàn là số nên ko cần stable đâu
3 Likes
#include<bits/stdc++.h>
using namespace std;
void solve(){
int n,k;
long long dem=0;
cin>>n>>k;
int a[n];
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
for(int i=0;i<n-1;i++){
int id=upper_bound(a,a+n,a[i]+k-1)-a;
dem=dem+1LL*(id-i-1);
}
cout<<dem<<endl;
}
int main(){
int t;
cin>>t;
while(t--)
solve();
}
mn cho e hỏi sao e code bài này chạy đúng nhưng nộp bài lại bị wa ạ , code ở dưới ạ , em cảm ơn::
#include<bits/stdc++.h>
using namespace std;
int last_poss(int a[],int l,int r,int x){
int res=-1;
while(l<=r){
int m=(l+r)/2;
if(a[m]<x){
res=m;
l=m+1;
}
else{
r=m-1;
}
}
return res;
}
int first_poss(int a[],int l,int r,int x){
int res=-1;
while(l<=r){
int m=(l+r)/2;
if(a[m]>x){
res=m;
r=m-1;
}
else{
l=m+1;
}
}
return res;
}
int main(){
int t;
cin >> t;
while(t--){
int n,k;
cin >> n >> k;
int a[n];
for(int i=0;i<n;i++){
cin >> a[i];
}
int ans=0;
sort(a,a+n);
for(int i=0;i<n;i++){
int l=i+1;
int r=n-1;
int res=last_poss(a,l,r,k+a[i]);
if(res != -1){
ans+=res-i;
}
}
cout<<ans<<endl;
}
return 0;
}
dg rồi
dùng lower_bound dc đó