제출 #1328725

#제출 시각아이디문제언어결과실행 시간메모리
132872524ta_tdanhPairs (IOI07_pairs)C++20
30 / 100
256 ms293816 KiB
#include <bits/stdc++.h>
#define endl '\n'
#define fi first
#define se second
#define eb emplace_back
#define pb push_back
#define ALL(A) A.begin(), A.end()
#define FOR(i, l, r) for (int i = l; i <= r; i++)
#define FOR2(i, l, r) for (int i = l; i >= r; i--)
#define ce cout<<endl;
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
using pii = pair<int, int>;
using str = string;
using T = pair<ll,int>;
const ll INF = (ll)1e18;
const int N = 1e5;
// Author : T_Danh - Tri An High School 

void solve1(){
    int n, d , m;
    cin >> n >> d >> m;
    vector<int> cnt(m + 1 , 0);
    FOR(i,1,n){
        int pos ;
        cin >> pos;
        cnt[pos] ++ ;
    }
    ll cur = 0;
    ll res = 0;
    FOR(i,1,m){
        res += cur * cnt[i];
        cur += cnt[i];
        res += cnt[i] * (cnt[i] - 1) / 2;
        if(i > d){
            cur -= cnt[i - d];
        }
    }
    cout << res <<endl;
}
struct BIT{
    int n;
    vector<vector<int>> st;
    BIT(int _n){
        n = _n;
        st.resize(n + 1);
    }
    void upd(int x, int val){
        for(;x <= n ; x += x & -x){
            st[x].eb(val);
        }
    }
    int get(int x, int val){
        int cnt =  0;
        for(;x > 0  ; x -= x & - x){
            cnt+= st[x].size() - (lower_bound(st[x].begin() , st[x].end() , val) - st[x].begin());
        }
        return cnt;
    }
    int query(int l , int r , int val){
        return get(r , val) - get(l - 1 , val);
    }
};
void solve2(){
    int n , d,  m;
    cin >> n >> d >> m;
    vector<pii> P(n);
    FOR(i,0,n - 1){
        cin >> P[i].fi >> P[i].se;
    }
    sort(ALL(P));
    BIT st_up(m) , st_down(m);
    ll res=  0;
    for(pii& p : P){
        int x = p.fi , y = p.se;
        res += st_up.query(y , n ,- d + x - y);
        res += st_down.query(1 , y - 1 , -d + x + y);
        st_up.upd(y , x - y);
        st_down.upd(y , x + y);
    }
    cout << res <<endl;
}

void solve3(){

}


void solve() {
    int b;
    cin >> b;
    if(b == 1){
        solve1();
    }
    else if(b == 2){
        solve2();
    }
    else{
        solve3();
    }
}   
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    #define NAME "odometer"
    if (fopen(NAME".in", "r"))
        freopen(NAME".in", "r", stdin),
        freopen(NAME".out", "w", stdout);

    int t = 1;
    while (t--) {
        solve();
    }
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

pairs.cpp: In function 'int main()':
pairs.cpp:109:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  109 |         freopen(NAME".in", "r", stdin),
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
pairs.cpp:110:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  110 |         freopen(NAME".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...