제출 #1290383

#제출 시각아이디문제언어결과실행 시간메모리
1290383uocgiInspections (NOI23_inspections)C++20
29 / 100
1348 ms1114112 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define pb push_back
#define ii pair<int,int>
#define int long long
#define TASK "Inspections"
const int maxn = 3e5+5;
const int mod = 1e9+7;
int m,n,q;
ii a[maxn];
namespace sub1{
    vector<int> b;
    int pos[maxn];
    int calc(int x){
        int cnt = 0;
        for (int i = 1;i<=n;i++) pos[i] = -1;
        for (int i = (int)b.size()-1;i>=0;i--){
//            cout << i << " " << pos[b[i]] << "\n";
            if (pos[b[i]]!=-1){
                if (pos[b[i]]-i-1>=x) cnt++;
            }
            pos[b[i]] = i;
        }
        return cnt;
    }
    void solve(){
        for (int i = 1;i<=m;i++){
            for (int j = a[i].fi;j<=a[i].se;j++){
                b.pb(j);
            }
        }
//        for (int x : b) cout << x << " ";
//        cout << "\n";
        while (q--){
            int x; cin >> x;
            cout << calc(x) << " ";
        }
    }
}
namespace sub2{
    vector<int> b;
    int pos[maxn];
    int calc(int x){
        int cnt = 0;
        for (int i = 1;i<=n;i++) pos[i] = -1;
        for (int i = (int)b.size()-1;i>=0;i--){
//            cout << i << " " << pos[b[i]] << "\n";
            if (pos[b[i]]!=-1){
                if (pos[b[i]]-i-1>=x) cnt++;
            }
            pos[b[i]] = i;
        }
        return cnt;
    }
    vector<int> diff;
    void prepare(){
        for (int i = 1;i<=n;i++) pos[i] = -1;
        for (int i = (int)b.size()-1;i>=0;i--){
//            cout << i << " " << pos[b[i]] << "\n";
            if (pos[b[i]]!=-1){
                diff.pb(pos[b[i]]-i-1);
            }
            pos[b[i]] = i;
        }
        sort(diff.begin(),diff.end());
    }
    void solve(){
        for (int i = 1;i<=m;i++){
            for (int j = a[i].fi;j<=a[i].se;j++){
                b.pb(j);
            }
        }
        prepare();
        while (q--){
            int x; cin >> x;
            int lb = lower_bound(diff.begin(),diff.end(),x)-diff.begin();
            cout << diff.size()-lb << " ";
        }
    }
}
namespace sub3{
    bool check(){
        for (int i = 1;i<=m;i++) if (a[i].fi!=1) return 0;
        return 1;
    }
    void solve(){

    }
}
signed main(){
    ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    if (fopen(TASK".inp","r")){
        freopen(TASK".inp","r",stdin);
        freopen(TASK".out","w",stdout);
    }
    cin >> n >> m >> q;
    for (int i = 1;i<=m;i++) cin >> a[i].fi >> a[i].se;
//    sub1::solve();
    sub2::solve();
}

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

Main.cpp: In function 'int main()':
Main.cpp:96:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |         freopen(TASK".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Main.cpp:97:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |         freopen(TASK".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...