hdu5481 Desiderium
链接
题意
给定n条线段,从中选取若干条,共有2n种选法(因为每一条线段有两种方法:选或者不选).
每一种选法都对应一个长度,也就是所选线段的并集长度.
求这2n种选法长度之和.
解法:
把这n条线段进行离散化,使得任意一条线段都可以由若干条元线段组成.
什么叫元线段呢?把全部的x坐标进行排序,去重,就得到了很多元线段.
统计每条元线段出现的次数,也就是说它被这n条线段里面的多少个线段覆盖.
如合统计呢?假设元线段被m条线段覆盖,那么有n-m条线段不覆盖它.
所以,该元线段被2n种选法中的2n-2n-m种选法覆盖.
ans=累加(元线段的长度*元线段使用的次数).
写法:
主要是如何统计元线段出现的次数.
- 建立线段树,把没一条线段进行插入O(nlgn)
- 树状数组O(nlgn)
- 普通数组O(n),这种方法最好,不仅简单,而且快.
代码(树状数组版):
#include<iostream> #include<string.h> #include<stdio.h> #include<math.h> #include<stdlib.h> #include<algorithm> using namespace std; #define re(i,n) for(int i=0;i<n;i++) typedef long long ll; const int maxn = 1e5 + 7; const int mod = 1e9 + 7; int n; struct Re{ int l, r; }a[maxn]; int x[maxn << 1], xi; int tr[maxn << 1]; #define lson(x) x<<1,f,mid #define rson(x) x<<1|1,mid+1,r int lowbit(int x){ return x&-x; } void ins(int x, int v){ for (int i = x; i > 0; i -= lowbit(i)){ tr[i] += v; } } int query(int x){ int ans = 0; for (int i = x; i < xi; i += lowbit(i)){ ans += tr[i]; } return ans; } int data[maxn]; int f(int m){ return data[n] - data[n - m]; } void init(){ data[0] = 1; re(i, maxn - 2){ data[i + 1] = ((ll)data[i] << 1) % mod; } } int cnt[maxn << 1]; int main(){ //freopen("in.txt", "r", stdin); init(); int T; cin >> T; while (T--){ scanf("%d", &n); xi = -1; re(i, n){ scanf("%d%d", &a[i].l, &a[i].r); x[++xi] = a[i].l, x[++xi] = a[i].r; } ++xi; sort(x, x + xi); xi = unique(x, x + xi) - x; memset(tr, 0, sizeof(tr)); re(i, n){ int beg = lower_bound(x, x + xi, a[i].l) - x; int over = lower_bound(x, x + xi, a[i].r) - x; ins(beg, -1), ins(over, 1); } cnt[0] = 0; for (int i = 1; i < xi; i++)cnt[i] = query(i); //re(i, xi)printf("(%d,%d) ", i, cnt[i]); //puts(""); ll ans = 0; re(i, xi - 1){ ll len = (ll)x[i + 1] - x[i]; int ge = cnt[i + 1]; //cout << len << " " << ge << endl; ans = (len*f(ge) + ans) % mod; } if (ans < 0)ans += mod; printf("%lld\n", ans); } return 0; }
代码(普通数组版):
#include<iostream> #include<algorithm> #include<stdio.h> using namespace std; typedef long long ll; #define re(i,n) for(int i=0;i<n;i++) ; ; struct Node{ int l, r; }a[maxn]; int n; ], xi; ]; int data[maxn]; void init(){ data[] = ; ; i < maxn-; i++){ data[i] = (data[i - ] << ) % mod; } } int main(){ //freopen("in.txt", "r", stdin); int T; cin >> T; init(); while (T--){ scanf("%d", &n); xi = -; re(i, n)scanf("%d%d", &a[i].l, &a[i].r), x[++xi] = a[i].l, x[++xi] = a[i].r; sort(x, x + xi + ); xi = unique(x, x + xi + ) - x; re(i, xi)cnt[i] = ; re(i, n){ int f = lower_bound(x, x + xi, a[i].l) - x, t = lower_bound(x, x + xi, a[i].r) - x; cnt[t]++, cnt[f]--; } ; i >= ; i--){ cnt[i] += cnt[i + ]; } ll ans = ; re(i, xi-){ ] - x[i]; ]; ans = (ans + (ll)len*(data[n] - data[n - m])) % mod; } )ans += mod; printf("%lld\n", ans); } ; }
hdu5481 Desiderium的更多相关文章
- HDU 5481 Desiderium 动态规划
Desiderium Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=548 ...
随机推荐
- linux关于文件的那些事儿
一个文件的权限对于系统的安全来说是很重要的,linux是一个支持多任务多用户的系统,我们都不希望一些自己的文件被别人看到或者修改! 对于一个文件的权限我们可以用 ls -l 命令来查看,例如: [ro ...
- IE6-9不支持Textarea的maxlength属性
给textarea标签添加一个maxlength=200,测试工程师提bug说IE9没起作用.后一测试,发现IE10一下的浏览器均不支持 <textarea maxlength="20 ...
- 高仿一元云购IOS应用源码项目
高仿一元云购IOS应用(高仿自一元云购安卓客户端) 本App因官方没有IOS客户端故开发,利用业务时间历时2个星期,终于开发完成,又因苹果的各大审核规则对此App的影响,又历时1个多月才终于成功上架, ...
- 系统进程 zygote(一)—— 概述
和蔼的春光,充满鸳鸯的池塘:快辞别寂寞的梦乡,来和我摸一会鱼儿,折一枝海棠.—— 徐志摩·醒!醒! ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张 ...
- 二:Go编程语言规范-类型
1.类型 布尔值,数值与字符串类型的实例的命名是预声明的. 数组,结构,指针,函数,接口,切片,映射和信道这些复合类型可由类型字面构造. 每个类型 T 都有一个 基本类型:若 T 为预声明类型或类型字 ...
- HADOOP HDFS的设计
Hadoop提供的对其HDFS上的数据的处理方式,有以下几种, 1 批处理,mapreduce 2 实时处理:apache storm, spark streaming , ibm streams 3 ...
- java设计模式之装饰模式
发现设计模式的学习越来越让自己学习的东西太少了,应该多接触一些东西,多出去走一走. 装饰模式概念: 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活(大话设计模式) 在不 ...
- cuda多线程间通信
#include "cuda_runtime.h" #include "device_launch_parameters.h" #include <std ...
- git config命令使用
1. git config简介 我们知道config是配置的意思,那么git config命令就是对git进行一些配置.而配置一般都是写在配置文件里面,那么git的配置文件在哪里呢?互动一下,先问下大 ...
- Linux混杂设备驱动学习
Linux混杂设备是字符设备的一类,主要是混杂设备拥有相同的主设备号(10),但是次设备号是不同的.所有的混杂设备行程一个链表,对设备访问时内核更据次设备号查找到相应的混杂设备. 混杂设备用struc ...