Advertisement
a53

secvente6

a53
Sep 11th, 2022
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. ifstream f("secvente.in");
  4. ofstream g("secvente.out");
  5. const int nmax=100090;
  6. int n,t,ind=1;
  7. long long pre[nmax];
  8. pair<int,int> v[nmax];
  9.  
  10. long long calc(int p,int q,int st,int dr)
  11. {
  12. return (long long)pre[q]-pre[p-1]-1ll*(v[q+1].second-dr-1)*v[q].first-1ll*(dr-v[p].second+1)*(st-1);
  13. }
  14.  
  15. int main()
  16. {
  17. f>>n;
  18. for(int i=1;i<=n;++i)
  19. f>>v[i].first>>v[i].second;
  20. sort(v+1,v+n+1);
  21. for(int i=2;i<=n;++i)
  22. if(v[i].first>=v[ind].first)
  23. {
  24. while(ind>0&&v[ind].second>=v[i].second)
  25. --ind;
  26. v[++ind]=v[i];
  27. }
  28. n=ind;
  29. v[n+1]={v[n].second+1,1000001};
  30. for(int i=1;i<=n;++i)
  31. pre[i]=pre[i-1]+1ll*v[i].first*(v[i+1].second-v[i].second);
  32. f>>t;
  33. for(int i=1,st,dr,mid,poz1,poz2,p,q;i<=t;++i)
  34. {
  35. f>>st>>dr;
  36. p = poz1=0,poz2=n;
  37. while(poz1<=poz2)
  38. {
  39. mid=((poz1+poz2)>>1);
  40. if(st>v[mid].first)
  41. poz1=mid +1;
  42. else
  43. p=mid,poz2=mid-1;
  44. }
  45. if(p==0||dr<v[p].second)
  46. {
  47. g<<"0\n";
  48. continue;
  49. }
  50. poz1=p,poz2=n,q=0;
  51. while(poz1<=poz2)
  52. {
  53. mid=((poz1+poz2)>>1);
  54. if(dr<v[mid].second)
  55. poz2=mid-1;
  56. else
  57. q=mid,poz1=mid+1;
  58. }
  59. g<<calc(p,q,st,dr)<<'\n';
  60. }
  61. return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement