Submission #1150608

#TimeUsernameProblemLanguageResultExecution timeMemory
1150608zjjwsInspections (NOI23_inspections)C++20
0 / 100
5 ms9800 KiB
#pragma GCC optimize(2) #include <bits/stdc++.h> using namespace std; // #define LL __int128_t #define LL long long const int Rea=1e5+3; bool ifnum(char x){return x>='0'&&x<='9';} bool ifupchr(char x){return x>='A'&&x<='Z';} bool iflochr(char x){return x>='a'&&x<='z';} bool ifchr(char x){return x=='('||x==')'||x=='['||x==']'||ifnum(x)||ifupchr(x)||iflochr(x);} struct Rin { char c; char gc() { static char rea[Rea]; static char *head,*tail; return head==tail&&(tail=(head=rea)+fread(rea,1,Rea,stdin) ,head==tail)?EOF:*head++; } Rin&operator >>(int &x) { bool tag=false;x=0; for(c=gc();!ifnum(c);c=gc())if(c=='-'){c=gc();tag=true;break;} for(;ifnum(c);c=gc())x=(x<<1)+(x<<3)+(c^'0');if(tag)x=-x;return *this; } Rin&operator >>(LL &x) { bool tag=false;x=0; for(c=gc();!ifnum(c);c=gc())if(c=='-'){c=gc();tag=true;break;} for(;ifnum(c);c=gc())x=(x<<1)+(x<<3)+(c^'0');if(tag)x=-x;return *this; } Rin&operator >>(char &x) { for(c=gc();!ifchr(c);c=gc()); x=c; return *this; } Rin&operator >>(string &x) { x.clear(); for(c=gc();!ifchr(c);c=gc()); for(;ifchr(c);c=gc())x.push_back(c); return *this; } }rin; const int N=2e5+3; int n,m,q; map<LL,LL>val; vector<LL>inse[N]; vector<LL>eras[N]; void cover(int ql,int qr,LL qv) { inse[ql].push_back(qv); eras[qr+1].push_back(qv); return; } set<LL>timed; void insert(LL p,int lens) { if(!timed.empty()) { auto it=timed.upper_bound(p),jt=it; if(it==timed.end()) { jt--; val[p-(*jt)-1]+=lens; } else if(it==timed.begin()) { val[(*it)-p-1]+=lens; } else { jt--; val[(*it)-(*jt)-1]-=lens; val[p-(*jt)-1]+=lens; val[(*it)-p-1]+=lens; } } timed.insert(p); return; } void erase(LL p,int lens) { if(!timed.empty()) { auto it=timed.upper_bound(p),jt=timed.find(p); if(it==timed.end()) { jt--; val[p-(*jt)-1]-=lens; } else if(it==timed.begin()) { val[(*it)-p-1]-=lens; } else { jt--; val[(*it)-(*jt)-1]+=lens; val[p-(*jt)-1]-=lens; val[(*it)-p-1]-=lens; } } timed.erase(timed.find(p)); return; } int L; LL key[N<<6]; LL sum[N<<6]; void que(LL s) { int l=1,r=L; LL ans=0; for(;l<=r;) { int mid=l+r>>1; if(key[mid]<s)ans=sum[mid],l=mid+1; else r=mid-1; } printf("%lld",sum[L]-ans); // print(sum[L]-ans); if(q!=1)putchar(' '); return; } int main() { rin>>n>>m>>q; LL tim=1; for(;m-->0;) { int l,r;rin>>l>>r; cover(l,r,tim-l); tim+=(r-l+1); } for(int i=1;i<=n;i++) { for(auto p:eras[i])erase(p,n-i+1); for(auto p:inse[i])insert(p,n-i+1); } for(auto [u,v]:val) { key[++L]=u; sum[L]=sum[L-1]+v; } for(;q>0;q--) { LL s;rin>>s; que(s); } return 0; }
#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...