Submission #962112

#TimeUsernameProblemLanguageResultExecution timeMemory
962112AmrStrange Device (APIO19_strange_device)C++17
0 / 100
218 ms2516 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define S second #define F first #define all(x) (x).begin(),(x).end() #define sz size() #define Yes cout << "YES" << endl #define No cout << "NO" << endl #define pb(x) push_back(x); #define endl '\n' #define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); const int N=1e7; ll INF=INT_MAX,mod=1e9+7; int TT=1; ll power(ll x, unsigned int y) { ll res = 1; x = x; // % mod; if (x == 0) return 0; while (y > 0) { if (y & 1) res = (res*x) ; // % mod; y = y>>1; x = (x*x) ; // % mod; } return res; } typedef unsigned long long ull; ll lo(ll x) { ll cnt = 0; while(x) cnt++,x/=10; return cnt-1; } ll f(ll x, ll y) { ll m = (x/power(10,lo(x)))*(y/power(10,lo(y))); return (lo(x)+lo(y)+lo(m)>=19||(x*y)>1e18); } ll k = 1; ll seg[N]; bool qu[N]; int L[N],R[N]; ll siz = 1e18; void nn(ll x) { L[x] = k++; L[k-1] = -1, R[k-1] = -1; R[x] = k++; L[k-1] = -1, R[k-1] = -1; } ll get(ll l ,ll r, ll x = 0, ll lx = 0, ll rx = siz) { if(lx>=r||rx<=l) return 0; if(lx>=l&&rx<=r) { return seg[x]; } ll mid = (lx+rx)/2; if(L[x]==-1) nn(x); ll s1 = get(l,r,L[x],lx,mid); ll s2 = get(l,r,R[x],mid,rx); return max(s1+s2,qu[x]*(min(rx,r)-max(lx,l))); } void update(ll l , ll r, ll x = 0, ll lx = 0, ll rx = siz) { if(lx>=r||rx<=l) return; if(lx>=l&&rx<=r) { qu[x] = 1; seg[x] = (rx-lx); return; } ll mid = (lx+rx)/2; if(L[x]==-1) nn(x); update(l,r,L[x],lx,mid); update(l,r,R[x],mid,rx); //cout << lx << " " << rx << " "; seg[x] = max(seg[L[x]]+seg[R[x]],qu[x]*(rx-lx)); //cout << x << seg[x] << qu[x] << endl; } void solve() { L[0] = -1, R[0] = -1; ll n; ull a , b; cin >> n >> a >> b; ll mgcd = __gcd(a,b+1); a/=mgcd; ull cntans = 0; if(f(a,b)) { for(int i = 1; i <= n; i++) { ull l , r; cin >> l >> r; cntans+=(r-l+1); } cout << cntans << endl; return; } a*=b; ull ab = a; //cout << ab << endl; ll ans = 0; for(int i = 1; i <= n; i++) { ull l , r; cin >> l >> r; //cout << min(a,r-l+1) << endl; l--,r--; if(r>=l+ab) r = l+ab-1; if(l%ab<=r%ab) { ans+=r-l+1;//-get(l%ab,r%ab+1); //update(l%ab,r%ab+1); } else { ans+=r%ab+1;//-get(0,r%ab+1); ans+=ab-l%b;//-get(l%ab,ab); //update(0,r%ab+1); //update(l%ab,ab); } //cout << 'h' << endl; } cout << ans << endl; } int main(){ //freopen("friday.in","r",stdin); //freopen("friday.out","w",stdout); fast; while(TT--) solve(); 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...