Description

很久很以前,有一个古老的村庄——xiba村,村子里生活着n+1个村民,但由于历届村长恐怖而且黑暗的魔法统治下,村民们各自过着独立的生活,完全没有意识到其他n个人的存在。
但有一天,村民xiba臻无意中也得到了魔法,并发现了这个恐怖的事实。为了反抗村长,他走遍了全世界,找到了其他n个村民,并组织他们发动革命。但让这n个素不相识的村民(xiba臻已跟他们认识)同心协力去抵抗村长是很困难的,所以xiba臻决定先让他们互相认识。
这里,xiba臻用了xiba村特有的xiba思维:先让这n个人排成一列,并依次从1-n标号。然后每次xiba臻会选出一个区间[l, r],在这个区间中的人会去认识其他在这个区间中的人,但已经认识过得不会再去认识。这样,进行m次操作后,xiba臻认为这n个人能认识到许多人。
但是,为了精确地知道当前有多少对人已经认识了,xiba臻想要知道每次操作后会新产生出多少对认识的人,但这已是xiba思维无法解决的事了,你能帮帮他吗?

Input

第一行两个整数n,m。
接下来m行每行两个整数li,ri,表示每次操作的区间。

Output

共m行,每行一个整数ans_i,表示第i次操作后新产生出ans_i对认识的人。

Sample Input

5 5
2 3
2 4
3 5
1 5
2 4

Sample Output

1
2
2
5
0

Data Constraint

对于20%的数据,1≤n,m≤100。
对于50%的数据,1≤n,m≤5000。
对于100%的数据,1≤n,m≤300000,1≤li≤ri≤n。

背景:做完这题,真的想说一句我的天。

分析:
20%,纯暴力。
50%,设f[i]为某人i能认识i–f[i]的人,显然这个数组具有单调性。对于每次询问l–r,枚举区间内每个人,因为当前某人i能使前i个人认识,现在有让他与l–i-1的人认识(为不重复,只讨论每个人前面的人),显然增加了f[i]-l个人,统计和,即可。
70%:由于具有单调性,如果f[i]<=l,即已经认识了前面在区间内的所有人,显然对答案无贡献,那后面的点也没有贡献啦。
100%:(正解):用线段树维护全间最大值和区间和,用50%方法即可。
(水解):这个方法不知在各大题库能否过。70%的点是从l–r枚举,变为从r–l枚举,因为数据的问题,倒着枚举会先break掉,不会超时,甚至会比正解快。

代码:

vari,j,l,r,n,m:longint;ans:int64;f:array [1..300001] of longint;beginassign(input,'ohmygod.in');assign(output,'ohmygod.out');reset(input);rewrite(output);readln(n,m);for i:=1 to n dof[i]:=i;for i:=m downto 1 dobeginreadln(l,r);ans:=0;for j:=r downto l dobeginif f[j]>l thenbeginans:=ans+f[j]-l;f[j]:=l;endelse break;end;writeln(ans);end;close(input);close(output);
end.
typecy=recordsum:int64;lab,max:longint;end;
constmaxn=300005;
varn,m,i,j,x,y,z:longint;a,ans:array[0..maxn]of int64;tree:array[0..maxn*4]of cy;
functionmax(x,y:longint):longint;
beginif x>y then exit(x)else exit(y);
end;
proceduremaketree(p,l,r:longint);
varmid:longint;
beginif l=r thenbegintree[p].sum:=a[l];tree[p].max:=a[l];tree[p].lab:=0;exit;end;mid:=(l+r)shr 1;maketree(p<<1,l,mid);maketree(p<<1+1,mid+1,r);tree[p].max:=max(tree[p<<1].max,tree[p<<1+1].max);tree[p].sum:=tree[p<<1].sum+tree[p<<1+1].sum;
end;
procedurepush(x,p,l,r,mid:longint);
begintree[p<<1].max:=x;tree[p<<1].sum:=x*(mid-l+1);tree[p<<1].lab:=x;tree[p<<1+1].max:=x;tree[p<<1+1].sum:=x*(r-mid);tree[p<<1+1].lab:=x;tree[p].lab:=0;
end;
functionfind(p,l,r,t:longint):longint;
varmid:longint;
beginif l=r then exit(l)elsebeginmid:=(l+r)>>1;if tree[p].lab<>0 then push(tree[p].lab,p,l,r,mid);if tree[p<<1].max>t then exit(find(p<<1,l,mid,t))else exit(find(p<<1+1,mid+1,r,t));end;
end;
procedurechange(p,l,r,a,b,t:longint);
varmid:longint;
beginif (l=a)and(r=b) thenbegintree[p].max:=t;tree[p].sum:=t*(b-a+1);if l<>r then tree[p].lab:=t;exit;end;mid:=(l+r)>>1;if tree[p].lab<>0 then push(tree[p].lab,p,l,r,mid);if b<=mid then change(p<<1,l,mid,a,b,t)else if a>mid then change(p<<1+1,mid+1,r,a,b,t)elsebeginchange(p<<1,l,mid,a,mid,t);change(p<<1+1,mid+1,r,mid+1,b,t);end;tree[p].max:=max(tree[p<<1].max,tree[p<<1+1].max);tree[p].sum:=tree[p<<1].sum+tree[p<<1+1].sum;
end;
beginassign(input,'ohmygod.in'); reset(input);assign(output,'ohmygod.out'); rewrite(output);readln(n,m);for i:=1 to n do a[i]:=i;maketree(1,1,n);ans[0]:=tree[1].sum;for i:=1 to m dobeginreadln(x,y);if tree[1].max<=x then ans[i]:=ans[i-1]elsebeginif x<>y thenbeginz:=find(1,1,n,x);if z<=x then change(1,1,n,x,y,x)else if z>y then ans[i]:=ans[i-1]else change(1,1,n,z,y,x);ans[i]:=tree[1].sum;endelse ans[i]:=ans[i-1];end;writeln(ans[i-1]-ans[i]);end;close(input); close(output);
end.

jzoj. 4298. 【NOIP2015模拟11.2晚】我的天相关推荐

  1. 【NOIP2015模拟11.3晚】JZOJ7月31日提高组T1 次芝麻

    [NOIP2015模拟11.3晚]JZOJ7月31日提高组T1 次芝麻 题目 题解 题意 分析 Code 题目 题解 题意 给出两个数 x x x, y y y 每次操作会将小的数乘2,大的数减去小的 ...

  2. JZOJ 4307. 【NOIP2015模拟11.3晚】喝喝喝

    Description Input Output Sample Input 3 2 5 3 1 Sample Output 4 Data Constraint Solution 首先,"坏对 ...

  3. 4298. 【NOIP2015模拟11.2晚】我的天

    Description 很久很以前,有一个古老的村庄--xiba村,村子里生活着n+1个村民,但由于历届村长恐怖而且黑暗的魔法统治下,村民们各自过着独立的生活,完全没有意识到其他n个人的存在. 但有一 ...

  4. 【NOIP2015模拟11.2晚】我的天

    题目 很久很以前,有一个古老的村庄--xiba村,村子里生活着n+1个村民,但由于历届村长恐怖而且黑暗的魔法统治下,村民们各自过着独立的生活,完全没有意识到其他n个人的存在. 但有一天,村民xiba臻 ...

  5. 4296. 【NOIP2015模拟11.2】有趣的有趣的家庭菜园

    Description 职业经营家庭菜园的JOI君每年在自家的田地中种植一种叫做IOI草的植物.IOI草的种子在冬天被播下,春天会发芽并生长至一个固定的高度.到了秋天,一些IOI草会结出美丽的果实,并 ...

  6. JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)

    3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...

  7. 千万用户同时在线,优酷智能档在双11“猫晚”直播如何防卡顿?

    作者 | 阿里文娱高级技术专家肖文良 出品 | AI科技大本营(ID:rgznai100) 导读:本文为阿里文娱高级技术专家肖文良在[阿里文娱2019双11猫晚技术沙龙]中的演讲,主要内容为如何通过优 ...

  8. 大促下的智能运维挑战:阿里如何抗住“双11猫晚”?

    作者 | 阿里文娱技术专家子霖 出品 | AI科技大本营(ID:rgznai100) 2019 双 11 猫晚在全球近 190 个国家和地区播出,海外重保是首要任务,如何提升海外用户观看猫晚的体验?本 ...

  9. A. [2021.1.29多校省选模拟11]最大公约数(杜教筛/数论)

    A. [2021.1.29多校省选模拟11]最大公约数 这是一个杜教筛的经典题目,最后我们只需要筛一下1∗xμ(x)1*x\mu(x)1∗xμ(x)这个函数的前缀和即可,然后看到有111这个函数,我们 ...

最新文章

  1. 应用层级时空记忆模型(HTM)实现对时序数据的异常检测
  2. 通过Lazada日销千件,国内爆款如此打开东南亚爆单之门
  3. 统计自然语言处理笔记
  4. Android Studio 导入应用时报错 Error:java.lang.RuntimeException: Some file crunching failed, see logs for de
  5. Fiddler 域名过滤
  6. 2.4 万余门在线课程免费开放!大量计算机相关课程.(赶紧收藏)
  7. 基于jquery.ajax的进一步封装
  8. python tar 多目录压缩脚本,使用tarfile(Python)只压缩给定目录中的文件
  9. java 字符串长度_ava练习实例:java字符串长度与Java String charAt() 方法 (建议收藏)...
  10. 文件服务器大量传送减负需要开启,网卡参数中的eee、流量控制、巨型帧、大量传输减负、中断节流率等名词都是什么意思doc.doc...
  11. vlan PVID和VID详解
  12. java对excel加密_随笔:Java 对Excel等文件进行加密、解密
  13. JavaScript改变图片大小
  14. Java快递配送管理系统
  15. 不写一行代码,让Excel轻松制作动态图表​
  16. 【TcaplusDB君】 行业新闻汇编(5月25日)
  17. 华为C8815 ROOT 成功
  18. VMware workstation Pro 15注册码
  19. 怀念:红客联盟,永存
  20. sentinel滑动时间窗口算法学习

热门文章

  1. Vue 内嵌微信登录二维码及修改默认样式
  2. 股票K线5,15,30,60分钟数据接口
  3. cobar mysql5.6_Cobar init error
  4. 移动APP卡顿问题解决实践
  5. 14、jmeter+badboy 录制脚本方式(2)
  6. DHCP+DHCP中继
  7. 新版Android Studio(4.1.1 for Windows 64-bit)的安装教程(超详细)
  8. juniper SRX55 简单配置
  9. html怎么能调用微信语音,微信录音-微信录音功能新用法!【微信录音】怎么用...
  10. 打开VB开发工具提示:Imagelist来自mscomctl.ocx控件出错,可能是mscomctl.ocx过期,解决方法...