这题想了很久没思路,不知道怎么不sort维护二维的最小值

emmmm原来是线段树/树状数组,一维sort,二维当成下标,维护三维的最小值

#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; void debug(){cout<<"fuck"<<endl;} struct pe{
int a,b,c;
}s[N];
int sum[N];
void update(int i,int x)
{
while(i<N)
{
sum[i]=min(sum[i],x);
i+=i&(-i);
}
}
int query(int i)
{
int ans=inf;
while(i>)
{
ans=min(ans,sum[i]);
i-=i&(-i);
}
return ans;
}
bool comp(pe x,pe y)
{
return x.a<y.a;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=;i<=n;i++)
cin>>s[i].a>>s[i].b>>s[i].c;
sort(s+,s+n+,comp);
memset(sum,inf,sizeof sum);
int ans=;
for(int i=;i<=n;i++)
{
if(query(s[i].b)<s[i].c)ans++;
update(s[i].b,s[i].c);
}
cout<<n-ans<<endl;
}
return ;
}
/******************** ********************/

BIT

#include<bits/stdc++.h>
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pii pair<int,int>
#define C 0.5772156649
#define pi acos(-1.0)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1 using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=+,inf=0x3f3f3f; void debug(){cout<<"fuck"<<endl;} struct pe{
int a,b,c;
}s[N];
int value[N<<],res;
void pushup(int rt)
{
value[rt]=min(value[rt<<],value[rt<<|]);
}
void btree(int l,int r,int rt)
{
value[rt]=inf;
if(l==r)return ;
int m=(l+r)/;
btree(ls);
btree(rs);
}
void update(int l,int r,int rt,int x,int c)
{
if(l==r)
{
value[rt]=min(value[rt],c);
return ;
}
int m=(l+r)/;
if(x<=m)update(ls,x,c);
else update(rs,x,c);
pushup(rt);
}
void query(int l,int r,int rt,int L,int R)
{
if(L<=l&&r<=R)
{
res=min(res,value[rt]);
return ;
}
int m=(l+r)/;
if(L<=m)query(ls,L,R);
if(R>m+) query(rs,L,R);
pushup(rt);
}
bool comp(pe x,pe y)
{
return x.a<y.a;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=;i<=n;i++)
cin>>s[i].a>>s[i].b>>s[i].c;
sort(s+,s+n+,comp);
btree(,n,);
int ans=;
for(int i=;i<=n;i++)
{
res=inf;
query(,n,,,s[i].b);
// cout<<res<<endl;
if(res<s[i].c)ans++;
update(,n,,s[i].b,s[i].c);
}
cout<<n-ans<<endl;
}
return ;
}
/********************
3
3
2 3 2
3 2 3
1 1 1
3
1 2 3
2 3 1
3 1 2
10
1 7 10
3 9 7
2 2 9
5 10 8
4 3 5
7 5 2
6 1 3
9 6 6
8 4 4
10 8 1
********************/

Segment Tree

线段树比树状数组慢

2015 Benelux Algorithm Programming Contest (BAPC 15)E - Excellent Engineers的更多相关文章

  1. 2014 Benelux Algorithm Programming Contest (BAPC 14)E

    题目链接:https://vjudge.net/contest/187496#problem/E E Excellent Engineers You are working for an agency ...

  2. 2018 Benelux Algorithm Programming Contest (BAPC 18)

    目录 Contest Info Solutions A A Prize No One Can Win B Birthday Boy C Cardboard Container D Driver Dis ...

  3. 2015 Benelux Algorithm Programming Contest I- Interesting Integers

    题目大意:给你一个数字n(n<=1e9) ,让你求一个能包含这个数的斐波那契数列的第一项a 和第二项b,找出b最小的那个. 帮我复习了一下扩展欧几里得.... 思路:a,b,a+b,a+2b…… ...

  4. 2015 Benelux Algorithm Programming Contest E-Excellent Engineers

    题目大意:有n个人,每个人都有三个物品,排名分别为a[ i ],b[ i ],b[ i ],现在要删掉其中的一些人 如果一个人x的三个物品的排名为a[ x ],b[ x ],b[ x ],若存在另一个 ...

  5. 2018 Benelux Algorithm Programming Contest (BAPC 18)I In Case of an Invasion, Please. . .

    题意:一副无向有权图,每个点有一些人,某些点是避难所(有容量),所有人要去避难所,问最小时间所有人都到达避难所, 题解:dij+二分+最大流check,注意到避难所最多10个,先挨个dij求到避难所的 ...

  6. Gym -102007 :Benelux Algorithm Programming Contest (BAPC 18) (寒假自训第5场)

    A .A Prize No One Can Win 题意:给定N,S,你要从N个数中选最多是数,使得任意两个之和不大于S. 思路:排序,然后贪心的选即可. #include<bits/stdc+ ...

  7. 2017 Benelux Algorithm Programming Contest (BAPC 17) Solution

    A - Amsterdam Distance 题意:极坐标系,给出两个点,求最短距离 思路:只有两种方式,取min  第一种,先走到0点,再走到终点 第二种,走到同一半径,再走过去 #include ...

  8. 2015 German Collegiate Programming Contest (GCPC 15) + POI 10-T3(12/13)

    $$2015\ German\ Collegiate\ Programming\ Contest\ (GCPC 15) + POI 10-T3$$ \(A.\ Journey\ to\ Greece\ ...

  9. Benelux Algorithm Programming Contest 2014 Final(第二场)

    B:Button Bashing You recently acquired a new microwave, and noticed that it provides a large number ...

随机推荐

  1. unity 人物描边锯齿

    项目原来实现描边用了2个pass,一个pass cull back 渲染政策,一个cull front 渲染轮廓,但问题是锯齿特别明显 尝试了下边缘光实现描边,效果更不行,边线是断的

  2. python函数回顾:help()

    描述 help() 函数用于查看函数或模块用途的详细说明. 语法 help 语法: help([object]) 参数说明: object -- 对象: 返回值 返回对象帮助信息. 实例 以下实例展示 ...

  3. setdefault函数的用法及个人理解

    setdefault函数的用法及理解 dict.setdefault(key, default=None) 功能:如果键不存在于字典中,将会添加该键并将default的值设为该键的默认值,如果键存在于 ...

  4. ExtJS4 给同一个formpanel不同的url

    formpanel能够这样使用,api上的样例: var panel=Ext.create('Ext.form.Panel', { title: 'Simple Form', bodyPadding: ...

  5. SQLtie 增删该查

    建表,添加数据,更新数据,删除数据,删除表 . 先介绍三个核心方法 1.openDatabase:这个方法使用现有数据库或创建新数据库创建数据库对象. 2.transaction:这个方法允许我们根据 ...

  6. tfboys——tensorflow模块学习(二)

    tf.contrib模块 tf.contrib 模块是一个比较复杂的模块. contrib细节: tf.contrib.bayesflow.entropy  香农信息论 tf.contrib.baye ...

  7. (转)fiddler使用简介--其二

    原文地址:http://www.cnblogs.com/miantest/p/7290176.html 在上一篇中介绍了Fiddler的基本使用方法.通过上一篇的操作我们可以直接抓取浏览器的数据包.但 ...

  8. python并发编程之多进程2-(数据共享及进程池和回调函数)

    一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...

  9. JavaScript:学习笔记(2)——基本概念与数据类型

    JavaScript:学习笔记(2)——基本概念与数据类型 语法 1.区分大小写.Test 和 test 是完全不同的两个变量. 2.语句最好以分号结束,也就是说不以分号结束也可以. 变量 1.JS的 ...

  10. Python 开发者节省时间的 10 个小技巧

    Python 是一个美丽的语言,可以激发用户对它的爱.所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我推荐你尝试Python. Python有很多吸引程序员的功能 ...