以后做双精题请至少先跑个数据。。。输入都不一样。。。
做法就是离散化大力线段树。
记得在x+1和y-1插点 看这个数据:
1000 12
1 10050 8080 9950 981 56100 200200 300300 500500 600600 1000260 560160 580输出7(自己yy吧yy不了网上大把题解)
#include#include #include #include #include #include using namespace std;int n,m;struct query{ int x,y;}q[4100000];int lslen,ls[4100000];void LSH(){ lslen=0; for(int i=1;i<=m;i++) { ls[++lslen]=q[i].x,ls[++lslen]=q[i].y; if(q[i].x+1 n)i--,m--; if(q[i].y>n)q[i].y=n; } LSH(); trlen=0;bt(1,n); for(int i=1;i<=m;i++)change(1,q[i].x,q[i].y,i); memset(col,false,sizeof(col)); findans(1,1,n); int ans=0; for(int i=1;i<=m;i++) if(col[i]==true)ans++; printf("%d\n",ans); return 0;}