Submission #1290831

#TimeUsernameProblemLanguageResultExecution timeMemory
1290831uocgiInspections (NOI23_inspections)C++20
0 / 100
2 ms972 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);
            }
        }
//        for (int x : b) cout << x << " ";
        prepare();
        while (q--){
            int x; cin >> x;
            int lb = lower_bound(diff.begin(),diff.end(),x)-diff.begin();
            cout << diff.size()-lb << " ";
        }
    }
}
namespace sub3{
    map<int,int> mp;
    bool check(){
        for (int i = 1;i<=m;i++) if (a[i].fi!=1) return 0;
        return 1;
    }
    int pre[maxn];
    void solve(){
        stack<int> st;
        for (int i = 1;i<=m;i++){
            pre[i] = pre[i-1]+a[i].se;
        }
        for (int i = m;i>=1;i--){
            int cur = i;
            while (st.size() && a[st.top()].se<=a[i].se){
                if (cur == i) mp[a[i].se-1]+= a[st.top()].se;
                else {
//                    cout << i << " " << st.top() << " " << cur << "\n";
//                    cout << i << ' ' << st.top() << " " << a[i].se-1+pre[st.top()-1]-pre[cur] <<  "\n";
                    mp[a[i].se-1+pre[st.top()-1]-pre[i]]+=a[st.top()].se-a[cur].se;
                }
                cur = st.top();
                st.pop();
            }
            if (st.size()){
//                cout << i << " " << st.top() << "\n";
                if (cur == i){
                    mp[a[i].se-1]+=a[i].se;
                }
                else {
                    mp[a[i].se-1+pre[st.top()-1]-pre[i]]+=a[st.top()].se-a[cur].se;
                }
            }
            st.push(i);
        }
        vector<int> val,tt;
        int tmpp = 0;
        for (ii x : mp){
            tmpp+= x.se;
            val.pb(tmpp);
            tt.pb(x.fi);
//            cout << x.fi << " " << x.se << "\n";
        }
        for (int i = 1;i<=q;i++){
            int x; cin >> x;
            int ub = lower_bound(tt.begin(),tt.end(),x)-tt.begin();
            if (ub == tt.size()){
                cout << 0 << " ";
            }
            else {
                if (!ub) cout << tmpp << " ";
                else cout << tmpp-val[ub-1] << " ";
            }
        }
    }
}
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();
    if (sub3::check()) sub3::solve();
    else sub2::solve();
//    sub3::solve();
}

Compilation message (stderr)

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