제출 #587023

#제출 시각아이디문제언어결과실행 시간메모리
587023Do_you_copySails (IOI07_sails)C++14
100 / 100
82 ms2892 KiB
#include <bits/stdc++.h>
#define taskname "test"
#define fi first
#define se second
#define pb push_back
#define faster ios_base::sync_with_stdio(0); cin.tie(0);
using namespace std;

using ll = long long;
using pii = pair <int, int>;

ll min(const ll &a, const ll &b){
    return (a < b) ? a : b;
}

ll max(const ll &a, const ll &b){
    return (a > b) ? a : b;
}

const ll Mod = 1000000007;
const int maxN = 1e5 + 1;
int n;

pii a[maxN];
ll bit[maxN];

void update(int x, int val){
    for (int i = x; i < maxN; i += (i & -i)){
        bit[i] += val;
    }
}

ll get(int x){
    ll tem = 0;
    for (int i = x; i > 0; i -= (i & -i)){
        tem += bit[i];
    }
    return tem;
}

int find_left(int x, int val){
    int l = 1, r = x;
    while (l <= r){
        int m = (l + r) / 2;
        int tem = get(m);
        if (val != tem) l = m + 1;
        else r = m - 1;
    }
    return r + 1;
}

int find_right(int l, int val, int r){
    while (l <= r){
        int m = (l + r) / 2;
        int tem = get(m);
        if (val != tem) r = m - 1;
        else l = m + 1;
    }
    return r;
}


void Init(){
    cin >> n;
    for (int i = 1; i <= n; ++i) cin >> a[i].fi >> a[i].se;
    sort(a + 1, a + n + 1,[](const auto &i, const auto &j){
        return i.fi < j.fi;
    });
    for (int i = 1; i <= n; ++i){
        int x = a[i].fi - a[i].se + 1;
        int val = get(x);
        int l = find_left(x, val);
        int r = find_right(x, val, a[i].fi);
        if (r != a[i].fi){
            update(r + 1, 1);
            update(a[i].fi + 1, -1);
        }
        update(l, 1);
        update(l + a[i].se - (a[i].fi - r), -1);
    }
    ll ans = 0;
    for (int i = 1; i < maxN; ++i){
        ll x = get(i);
        ans += x * (x - 1) / 2;
    }
    cout << ans << "\n";
}

int main(){
    if (fopen(taskname".txt", "r")){
        freopen(taskname".txt", "r", stdin);
    }
    faster
    //freopen(taskname.inp, "r", stdin)
    //freopen(taskname.out, "w", stdout)
    Init();
}

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

sails.cpp: In function 'int main()':
sails.cpp:91:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |         freopen(taskname".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...