Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.19 KB | None | 0 0
  1. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.1,sse4.2,abm,mmx,avx,avx2,popcnt")
  2. //#pragma GCC optimize("fast-math")
  3. #pragma GCC optimize("unroll-loops")
  4. //#pragma comment(linker, "/STACK:36777216")
  5.  
  6. #define _CRT_SECURE_NO_WARNINGS
  7. #include <chrono>
  8. #include <set>
  9. #include <cstring>
  10. #include <map>
  11. #include <deque>
  12. #include <cmath>
  13. #include <queue>
  14. #include <cassert>
  15. #include <random>
  16. #include <bitset>
  17. #include <iomanip>
  18. #include <numeric>
  19. #include <time.h>//////////////
  20. #include <ctime>
  21. #include <string>
  22. #include <cstdio>
  23. #include <vector>
  24. #include <complex>
  25. #include <cstdlib>
  26. #include <iostream>
  27. #include <algorithm>
  28. #include <unordered_map>
  29. #include <unordered_set>
  30. //++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
  31. #define mp make_pair
  32. #define pbc push_back
  33. #define pob pop_back()
  34. #define empb emplace_back
  35. #define queuel queue<long long>
  36. #define sqr(a) ((a) * (a))
  37. #define all(x) (x).begin(), (x).end()
  38. #define rall(x) (x).rbegin(), (x).rend()
  39. #define pin(p) cin >> p.first >> p.second;
  40. #define uniq(a) sort(all(a));(a).resize(unique(all(a)) - a.begin());
  41. #define rev(v) reverse(v.begin(), v.end());
  42. #define sout(s, c) for (auto i : s) cout << i << c;
  43. #define pout(p) cout << p.first << " " << p.second;
  44. #define er(v, l, r) erase(v.begin() + l, v.begin() + r);
  45. #define vin(v) for (ll i = 0; i < v.size(); ++i) cin >> v[i];
  46. #define vout(v, c) for (int i = 0; i < v.size(); ++i) cout << v[i] << c;
  47. #define pushi(v, a) for (int i = 0; i < a.size(); ++i) v.push_back(a[i]);
  48. #define fastio() ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); srand(time(NULL))
  49. #define sp system("pause")
  50. //++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
  51. using namespace std;
  52. //++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
  53. typedef long long ll;
  54. typedef long double ld;
  55. typedef unsigned long long ull;
  56. //++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++
  57. const ld EPS = 1e-8;
  58. const int inf = 1e9;
  59. const ld PI = acos(-1);
  60. int mod = (int)998244353;
  61. const int MOD7 = 1000000007;
  62. const int MOD9 = 1000000009;
  63. const int a228 = 18;
  64. const ll kekmod = 1791791791;
  65. const ll bestmod = 1148822869;
  66. const ll secmod = (int) 1e9 + 113;
  67. vector<ll> mods = { kekmod,bestmod,mod,MOD9,1000000007 };
  68. vector<ll> hashpows = { 29,31,37,43,47,53,179,229 };
  69. mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count() + 228 + 'i' + 'q' + 1337 + 1488);
  70. //ll MOD = mods[rnd() % mods.size()];
  71. //ll hashpow = hashpows[rand() % hashpows.size();
  72. const int MAXN = 5e4 + 1;
  73. int ans = 0;
  74. int k;
  75. set<int> keks;
  76. int a[MAXN];
  77. inline void add(int x)
  78. {
  79. auto jj = keks.upper_bound(x);
  80. if (jj == keks.begin() || jj == keks.end())
  81. {
  82.  
  83. }
  84. else
  85. {
  86. auto lol = jj;
  87. ans -= ((*jj) - (*(--lol))) > k;
  88. }
  89. if (jj != keks.end()) ans += (*jj) - x > k;
  90. if (jj != keks.begin()) ans += (x - (*(--jj))) > k;
  91. keks.insert(x);
  92. }
  93. inline void del(int x)
  94. {
  95. auto kek = keks.upper_bound(x);
  96. auto lol = kek;
  97. int ta = (kek == keks.end() ? 0 : ((*kek) - x) > k);
  98. int tb = 0;
  99. kek--;
  100. if (kek != keks.begin())
  101. {
  102. kek--;
  103. tb = x - (*kek) > k;
  104. }
  105. ans -= ta + tb;
  106. if (lol == keks.end())
  107. {
  108. keks.erase(x);
  109. return;
  110. }
  111. if (lol == (++keks.begin()))
  112. {
  113. keks.erase(x);
  114. return;
  115. }
  116. ans += (*lol) - (*kek) > k;
  117. keks.erase(x);
  118. }
  119. int K;
  120. struct query
  121. {
  122. int l, r, i;
  123. };
  124. bool cmp(query a, query b)
  125. {
  126. if (a.l / K == b.l / K)
  127. {
  128. // return a.r < b.r;
  129. return (a.l / K % 2 ? a.r> b.r : a.r<b.r);
  130. }
  131. return a.l < b.l;
  132. }
  133. int anss[MAXN];
  134. query kekoses[MAXN];
  135. inline bool isdigit(char c)
  136. {
  137. return c >= '0' &&c <= '9';
  138. }
  139. #define _getchar_nolock getchar_unlocked
  140.  
  141. inline int readInt()
  142. {
  143. int ans = 0;
  144. char c;
  145. while (c = _getchar_nolock())
  146. {
  147. if (isdigit(c))
  148. {
  149. ans = c - '0';
  150. break;
  151. }
  152. }
  153. while (c = _getchar_nolock())
  154. {
  155. if (!isdigit(c))break;
  156. ans *= 10;
  157. ans += c - '0';
  158. }
  159. return ans;
  160. }
  161. signed main()
  162. {
  163. fastio();
  164. int n, q;
  165. n = readInt();
  166. q = readInt();
  167. k = readInt();
  168. K = 200;
  169. //cin >> n >> q >> k;
  170. for (int i = 0; i < n; ++i)
  171. {
  172. //cin >> a[i];
  173. a[i] = readInt();
  174. }
  175. for (int i = 0; i < q; ++i)
  176. {
  177. kekoses[i].l = readInt();
  178. kekoses[i].r = readInt();
  179. // cin >> kekoses[i].l >> kekoses[i].r;
  180. kekoses[i].l--;
  181. kekoses[i].r--;
  182. kekoses[i].i = i;
  183. }
  184. sort(kekoses, kekoses + q, cmp);
  185. int l = 0, r = -1;
  186. for (int i = 0; i < q; ++i)
  187. {
  188. while (r < kekoses[i].r)
  189. {
  190. add(a[++r]);
  191. }
  192. while (r > kekoses[i].r)
  193. {
  194. del(a[r--]);
  195. }
  196. while (l > kekoses[i].l)
  197. {
  198. add(a[--l]);
  199. }
  200. while (l < kekoses[i].l)
  201. {
  202. del(a[l++]);
  203. }
  204.  
  205. anss[kekoses[i].i] = ans;
  206. }
  207. for (int i = 0; i < q; ++i)
  208. {
  209. printf("%d ", anss[i] + 1);
  210. }
  211. sp;
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement