제출 #142674

#제출 시각아이디문제언어결과실행 시간메모리
142674Bodo171Strange Device (APIO19_strange_device)C++14
15 / 100
1279 ms64564 KiB
#include <iostream> #include <set> #include <fstream> using namespace std; const long long lim=(long long)(1LL*1e18)+1; long long n,i,j,l,r,A,B,L,R; long long ans; bool brk; struct pct { long long x,y; }nl; bool operator <(pct unu,pct doi) { return unu.x<doi.x; } bool operator !=(pct unu,pct doi) { return (unu.x!=doi.x||unu.y!=doi.y); } set <pct> s; set <pct>::iterator it,it1; long long gcd(long long x,long long y) { if((!x)||(!y)) return (x+y); return gcd(y,x%y); } void baga(long long st,long long dr) { pct S=nl,D=nl; it=s.lower_bound({st,dr}); if(it!=s.end()&&(*it).x<=dr) { D=(*it); dr=D.y; } if(it!=s.begin()) { it--; if((*it).y>=st) { S=(*it); st=S.x; } } if(S!=nl) s.erase(S); if(D!=nl) s.erase(D); s.insert({st,dr}); } int main() { //freopen("data.in","r",stdin); ios_base::sync_with_stdio(false); cin>>n>>A>>B; long long t=gcd(A,B+1); A/=t; long long per; if(lim/A<=B) per=1LL*lim; else per=1LL*A*B; for(i=1;i<=n;i++) { cin>>l>>r; if(l/per==r/per) { baga(l%per,r%per); } else { if(l/per+1<r/per) baga(0,per-1); baga(l%per,per-1); baga(0,r%per); } } for(it=s.begin();it!=s.end();it++) { ans+=1LL*((*it).y-(*it).x+1); } cout<<ans; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...