Submission #1290829

#TimeUsernameProblemLanguageResultExecution timeMemory
1290829uocgiInspections (NOI23_inspections)C++20
0 / 100
2 ms1116 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[cur]]+=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...