博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P2070 刷墙 离散化
阅读量:6644 次
发布时间:2019-06-25

本文共 1380 字,大约阅读时间需要 4 分钟。

洛谷P2070 刷墙 离散化

题意 区间覆盖 求覆盖了2次以上的线段有多少长

离散化一下,一条线段两个点,2n个点排序一下就行了

 

1 #include 
2 #define For(i, j, k) for(int i=j; i<=k; i++) 3 #define Dow(i, j, k) for(int i=j; i>=k; i--) 4 #define LL long long 5 using namespace std; 6 inline int read() { 7 int x = 0, f = 1; 8 char ch = getchar(); 9 while(ch<'0'||ch>'9') { if(ch=='-') f = -1; ch = getchar(); }10 while(ch>='0'&&ch<='9') { x = x*10+ch-48; ch = getchar(); }11 return x * f;12 }13 14 const int N = 100011; 15 struct node{16 int val, pos; 17 }point[2*N];18 int n,sum,L,R,num,ans; 19 20 inline bool cmp_pos(node a, node b) {21 return a.pos < b.pos; 22 }23 24 int main() {25 n = read(); 26 int now = 0, y;27 For(i, 1, n) {28 char ch[10]; 29 int len = read(); scanf("%s",ch+1); 30 int x = now; 31 if(ch[1]=='L') y = x-len; else y = x+len; 32 now = y; 33 if(x>y) swap(x, y); 34 point[++num].pos = x; point[num].val = 1; 35 point[++num].pos = y; point[num].val = -1; 36 }37 sort(point+1, point+num+1, cmp_pos); 38 39 For(i, 1, num) {40 int old = sum; 41 sum += point[i].val; 42 if(old==1 && sum==2) L = point[i].pos; 43 if(old==2 && sum==1) ans +=point[i].pos-L; 44 }45 printf("%d\n", ans); 46 return 0; 47 }

 

转载于:https://www.cnblogs.com/third2333/p/8443228.html

你可能感兴趣的文章
matlab练习程序(单源最短路径Bellman-Ford)
查看>>
深入理解Java的接口和抽象类
查看>>
JavaScript 简介
查看>>
随写内部类
查看>>
【WEB】Tomcat基础使用知识
查看>>
rest_framework频率组件
查看>>
计算a+b
查看>>
fopen()函数的使用
查看>>
增量/存量数据按时间维度分组
查看>>
WPF QuickStart系列之样式和模板(Style and Template)
查看>>
应用模型
查看>>
开源项目与许可证
查看>>
深入浅出JSON
查看>>
Servlet的声明周期里究竟怎么做的?
查看>>
有关性能测试协议选择问题
查看>>
JMeter学习笔记01-安装环境
查看>>
php二次开发以及垃圾回收机制
查看>>
转载《Data Guard Broker基础》
查看>>
Redhat openstack6.0的安装
查看>>
交换机套装书获京东网双重重磅推荐
查看>>