记录编号 570490 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOI Online 2022 1st]丹钓战 最终得分 100
用户昵称 Gravataryrtiop 是否通过 通过
代码语言 C++ 运行时间 5.332 s
提交时间 2022-04-06 20:19:33 内存使用 0.00 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int maxn = 500005;
  6. int n,m,a[maxn],b[maxn],stk[maxn],top,L[maxn];
  7. struct query {
  8. int x,y,id;
  9. query() {
  10. x = y = id = 0;
  11. }
  12. bool operator < (const query& p)const {
  13. return y < p.y;
  14. }
  15. }Q[maxn];
  16. int c[maxn];
  17. int lowbit(int x) {
  18. return x & -x;
  19. }
  20. void add(int x,int y) {
  21. if(!x)return ;
  22. for(;x <= n;x += lowbit(x))c[x] += y;
  23. return ;
  24. }
  25. int query(int x) {
  26. int ans = 0;
  27. for(;x;x -= lowbit(x))ans += c[x];
  28. return ans;
  29. }
  30. int ans[maxn];
  31. int main() {
  32. freopen("noi_online2022_stack.in","r",stdin);
  33. freopen("noi_online2022_stack.out","w",stdout);
  34. scanf("%d%d",&n,&m);
  35. for(int i = 1;i <= n;++ i)scanf("%d",&a[i]);
  36. for(int i = 1;i <= n;++ i)scanf("%d",&b[i]);
  37. for(int i = 1;i <= n;++ i) {
  38. while(top&&(a[stk[top]] == a[i]||b[stk[top]] <= b[i]))stk[top --] = 0;
  39. L[i] = stk[top];
  40. stk[++ top] = i;
  41. }
  42. for(int i = 1;i <= m;++ i) {
  43. Q[i].id = i;
  44. scanf("%d%d",&Q[i].x,&Q[i].y);
  45. }
  46. sort(Q + 1 , Q + 1 + m);
  47. for(int i = 1,j = 1;i <= m;++ i) {
  48. for(;j <= Q[i].y;++ j) {
  49. if(!L[j])continue ;
  50. add(L[j] , 1);
  51. }
  52. ans[Q[i].id] = Q[i].y - Q[i].x + 1 - query(Q[i].y) + query(Q[i].x - 1);
  53. }
  54. for(int i = 1;i <= m;++ i)printf("%d\n",ans[i]);
  55. fclose(stdin);
  56. fclose(stdout);
  57. return 0;
  58. }