Submission #1306723

#TimeUsernameProblemLanguageResultExecution timeMemory
1306723KhoaDuyPairs (IOI07_pairs)C++20
60 / 100
26 ms1740 KiB
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
struct fenwick{
    vector<int> bit;
    void build(int n){
        bit.assign(n+1,0);
    }
    void update(int i,int x){
        for(;i<bit.size();i+=(i&(-i))){
            bit[i]+=x;
        }
    }
    int query(int i){
        int curr=0;
        for(;i;i-=(i&(-i))){
            curr+=bit[i];
        }
        return curr;
    }
    int range(int l,int r){
        l=max(l,1);
        r=min(r,(int)bit.size()-1);
        if(l>r){
            return 0;
        }
        return (query(r)-query(l-1));
    }
};
signed main(){
    if(fopen("input.txt","r")){
        freopen("input.txt","r",stdin);
    }
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int b,n,d,m;
    cin >> b >> n >> d >> m;
    if(b==1){
        vector<int> v(n);
        for(int i=0;i<n;i++){
            cin >> v[i];
        }
        sort(v.begin(),v.end());
        int ptr=-1;
        ll ans=0;
        for(int i=0;i<n;i++){
            while(ptr+1<i&&v[i]-v[ptr+1]>d){
                ptr++;
            }
            ans+=(i-1-ptr);
        }
        cout << ans << endl;
        return 0;
    }
    if(b==2){
        vector<pair<int,int>> v(n);
        for(int i=0;i<n;i++){
            cin >> v[i].first >> v[i].second;
            v[i]={v[i].first-v[i].second,v[i].first+v[i].second};
        }
        fenwick bit;
        bit.build(2*m);
        sort(v.begin(),v.end());
        int ptr=-1;
        ll ans=0;
        for(int i=0;i<n;i++){
            while(ptr+1<n&&v[i].first-v[ptr+1].first>d){
                ptr++;
                bit.update(v[ptr].second,-1);
            }
            ans+=bit.range(v[i].second-d,v[i].second+d);
            bit.update(v[i].second,1);
        }
        cout << ans << endl;
        return 0;
    }
}

Compilation message (stderr)

pairs.cpp: In function 'int main()':
pairs.cpp:33:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   33 |         freopen("input.txt","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...