思路:1.把所有有长度的剑看做点。Ai点是肯定要取。然后求另一把剑。

  先对右区间排个序,然后每次看这个区间范围内有没有剑,如果没有就添加一把(值为右端点的剑);

  如果有并且数量为1且这条龙的Ai等这把剑的长度的话,说用还需要一把剑,再添加一把。

  否则不添加。

  至于怎么查询某个区间有没有剑,可以用树状数组,线段树之类的。

  2.也是先排序,然后set模拟。。。。具体看第二份代码吧,懒得打字了。

#include <bits/stdc++.h>
#define PB push_back
#define MP make_pair
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
#define PI acos((double)-1)
#define E exp(double(1))
#define K 1000000+9
struct node
{
int a,b,c;
}sw[];
int n,c[*K],mx,vis[K];
bool cmp(node ta,node tb)
{
if(ta.c==tb.c)
return ta.b<tb.b;
return ta.c<tb.c;
}
void add(int x,int v)
{
while(x<=mx)
{
c[x]+=v;
x+=x&(-x);
}
}
int get_sum(int x)
{
int sum=;
while(x>)
{
sum+=c[x];
x-=x&(-x);
}
return sum;
}
int main(void)
{
int t,cs=;cin>>t;
while(t--)
{
set<int>st;
cin>>n;
memset(c,,sizeof(c));
memset(vis,,sizeof(vis));
mx=;
for(int i=;i<=n;i++)
{
scanf("%d%d%d",&sw[i].a,&sw[i].b,&sw[i].c);
mx=max(mx,max(sw[i].a,sw[i].c));
}
for(int i=;i<=n;i++)
if(!vis[sw[i].a])
add(sw[i].a,),vis[sw[i].a]=;
sort(sw+,sw++n,cmp);
for(int i=;i<=n;i++)
{
int cnt=get_sum(sw[i].c)-get_sum(sw[i].b-);
if(sw[i].a>=sw[i].b &&sw[i].a<=sw[i].c && cnt==)
add(sw[i].c,);
else if(!cnt)
add(sw[i].c,);
}
printf("Case #%d: %d\n",cs++,get_sum(sw[n].c));
} return ;
}
#include <bits/stdc++.h>
#define PB push_back
#define MP make_pair
using namespace std;
typedef long long LL;
typedef pair<int,int> PII;
#define PI acos((double)-1)
#define E exp(double(1))
#define K 100000+9
struct node
{
int a,b,c;
}sw[K];
int n;
bool cmp(node ta,node tb)
{
if(ta.c==tb.c)
return ta.b<tb.b;
return ta.c<tb.c;
}
int main(void)
{
int t,cs=1;cin>>t;
while(t--)
{
set<int>st;
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&sw[i].a,&sw[i].b,&sw[i].c);
st.insert(sw[i].a);
}
sort(sw+1,sw+1+n,cmp);
for(int i=1;i<=n;i++)
{
set<int>::iterator it=st.lower_bound(sw[i].b);
if(it!=st.end() && *it==sw[i].a)it++;
if(it==st.end() || *it>sw[i].c )
if(sw[i].c==sw[i].a)
st.insert(-sw[i].c);
else
st.insert(sw[i].c);;
}
printf("Case #%d: %d\n",cs++,st.size());
} return 0;
}

UVALive 6911 F - Double Swords的更多相关文章

  1. UVALive 6911 Double Swords 树状数组

    Double Swords 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8 ...

  2. Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) F. Double Knapsack 鸽巢原理 构造

    F. Double Knapsack 题目连接: http://www.codeforces.com/contest/618/problem/F Description You are given t ...

  3. UVALive 6911 Double Swords (Set,贪心,求区间交集)

    补:华中VJ这个题目很多标程都不能AC了,包括我下面原本AC了的代码,再交就WA掉了,感觉是样例有问题呢-- 首先左边的是必须要选的,然后右边的需要注意,有些区间是可以舍掉的.1.区间里有两个不同的A ...

  4. ①创建项目testpackage ②在pack2.B中添加方法f ③在类A中添加如下三个成员变量:int型的私有变量i float型的变量f double型的公有变量d 在pack1.B的main方法中为对象a的成员变量f和d分别赋值为2和3 在pack2.C的main方法中为对象a的成员变量d赋值为3

    package pack1; public class A { private int i; float f; public double d; public float getF() { retur ...

  5. [codeforces 618 F] Double Knapsack (抽屉原理)

    题目链接:http://codeforces.com/contest/618/problem/F 题目: 题目大意: 有两个大小为 N 的可重集 A, B, 每个元素都在 1 到 N 之间. 分别找出 ...

  6. double型数据的输入和输出--%f和%lf

    scanf函数是通过指针指向变量的. %f告诉scanf函数在所传地址位置上存储一个float型值, 而%lf告诉scanf函数在所传地址位置上存储一个double型值. 这里float和double ...

  7. java使double保留两位小数的多方法 java保留两位小数

    这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 复制代码 代码如下: mport java.text.DecimalFormat; DecimalFormat    d ...

  8. UVALive 3635 分派

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  9. Java基础-数据类型int,short,char,long,float,double,boolean,byte

    Java语言是静态类型的(statical typed),也就是说所有变量和表达式的类型再编译时就已经完全确定.由于是statical typed,导致Java语言也是强类型(Strong typed ...

随机推荐

  1. MonoTouch

    本文为2012年4月19日Xamarin研讨会OLO在线咨询高级软件工程师Greg Shackles的一份的演讲资料. 本文为2012年4月19日Xamarin研讨会OLO在线咨询高级软件工程师Gre ...

  2. 用TortoiseSVN忽略文件或文件夹(ignore)(网络摘抄记录)

    Android项目需要协同一起开发时,就需要保证项目同步完整性.SVN忽略文件列表:.gradle .idea build local.properties *.iml app/*.iml app/b ...

  3. char类型能否存储一个中文字符?为什么

    char类型能否存储一个中文字符?为什么 解答:可以.一个char是两个字节,而一个中文也是两个字节.

  4. 数组有没有length()这个方法?String有没有length()这个方法?

    数组有没有length()这个方法?String有没有length()这个方法? 解答:数组没有length()方法 它有length属性 String有length()方法.

  5. 框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口

    框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口. 与Frame不同,Applet是在网页中显示的,也可以通过添加Panel进行组件布局. package TomAwt; im ...

  6. 蓝桥杯 第三届C/C++预赛真题(3) 比酒量(数学题)

    有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船 ...

  7. MD5文件校验

    经常看到在网上下载个什么东西,旁边经常会跟一个md5值,以前不太清楚是做什么的.今天偶然发现了一个liunux命令 md5sum.经查寻知道这个命令是用来生成或校验md5值的命令.还是刚才的问题,为什 ...

  8. 第十三篇:multimap容器和multiset容器中的find操作

    前言 multimap容器是map容器的“ 增强版 ”,它允许一个键对应多个值.对于map容器来说,find函数将会返回第一个键值匹配元素所在处的迭代器.那么对于multimap容器来说,find函数 ...

  9. ryu的RESTAPI简介——我主要用于下发和查看流表

    一.Rest API简介 REST即表述性状态传递(RepreSentational State Transfer),是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性. 表 ...

  10. 8782:乘积最大(划分dp)

    8782:乘积最大   同洛谷 P1018 乘积最大 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我 ...