URAL 1424. Minibus (贪心+multiset+multimap+线段树)
来源:互联网 发布:智慧树网络课程注册 编辑:程序博客网 时间:2024/06/07 13:13
题意:一辆车,从1点到n点,车上只有m个位置,载一个客人p块钱。承载哪些客人可以使收入最大。最大是多少,输出这些人。
可以中贪心。按下车的先后顺序排列。尽量让客车满载。
第八组数据大概长这副摸样:
10 3 3 11 31 31 3
使用了各种stl啊。。。。
#include <iostream>#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <stack>#include <map>#include <set>#include <list>#include <deque>#include <string>#define LL long long#define DB double#define SI(a) scanf("%d",&a)#define SD(a) scanf("%lf",&a)#define SS(a) scanf("%s",a)#define SF scanf#define PF printf#define MM(a,v) memset(a,v,sizeof(a))#define REP(i,a,b) for(int (i)=(a);(i)<(b);(i)++)#define REPD(i,a,b) for(int (i)=(a);(i)>(b);(i)--)#define N 100009#define INF 0x3f3f3f3f#define EPS 1e-8#define BUG puts("bug")#define PP pair<int,int>using namespace std;#define lson rt<<1,l,m#define rson rt<<1|1,m+1,rint n,m,k,p;multiset<PP> st;priority_queue<int, vector<int>, greater<int> > que;multimap<PP,int> mp;vector<int> L;int tree[N<<2];int wt[N<<2];void build(){ MM(tree,0); MM(wt,0);}void pushd(int rt){ if(wt[rt]) { wt[rt<<1] += wt[rt]; wt[rt<<1|1] += wt[rt]; tree[rt<<1] += wt[rt]; tree[rt<<1|1] += wt[rt]; wt[rt] = 0; }}void pushu(int rt){ tree[rt] = max(tree[rt<<1],tree[rt<<1|1]);}int query(int rt,int l,int r,int L,int R){ if(L<=l&&r<=R) { return tree[rt]; } pushd(rt); int m = (l+r)>>1,ans =0; if(L<=m) ans = max(ans,query(lson,L,R)); if(R>m) ans = max(ans,query(rson,L,R)); return ans;}void update(int rt,int l,int r,int L,int R){ if(L<=l&&r<=R) { tree[rt]++; wt[rt]++; return ; } int m = (l+r)>>1; if(L<=m) update(lson,L,R); if(m<R) update(rson,L,R); pushu(rt);}int main(){#ifndef ONLINE_JUDGE freopen("in.txt","r",stdin);#endif int a,b; SF("%d%d%d%d",&n,&m,&k,&p); REP(i,0,k) { SI(a); SI(b); st.insert(PP(b,a)); //mp[PP(a,b)] = i+1; //P aa = PP(a,b);int bb=i+1; mp.insert(pair<PP,int>(PP(a,b),i+1)); } multiset<PP>::iterator it; build(); while((int)st.size()>0) { it = st.begin(); int a = it->second,b=it->first; if(query(1,1,n,a,b-1)>=m) { st.erase(it); continue; } update(1,1,n,a,b-1); multimap<PP,int>::iterator mi = mp.find(PP(it->second,it->first)); L.push_back(mi->second); mp.erase(mi); que.push(it->first); st.erase(it); } cout<<(int)L.size()*p<<endl; REP(i,0,(int)L.size()) { if(i) cout<<" "; cout<<L[i]; } cout<<endl; return 0;}
- URAL 1424. Minibus (贪心+multiset+multimap+线段树)
- ural 1987. Nested Segments【离散化+贪心+线段树】
- map,multimap,set,multiset
- set,map,multiset,multimap
- STL源码:multimap、multiset
- c++ multimap multiset
- stl之multiset,multimap
- multimap和multiset容器
- map,multimap,set,multiset
- map/multimap/set/multiset
- C++ Primer笔记 multimap multiset
- map、multimap、set、multiset容器
- C++ STL multimap multiset 简介
- 线段树,堆,multiset:Holedox Eating
- hdu 4339 multiset 或 线段树
- ural 1028 Stars [线段树]
- URAL 1846 线段树 最大公约数
- STL容器之multimap和multiset
- arm_linux_device_mem内存映射
- Codeforces Round #196 (Div. 2)
- 选择排序与冒泡排序
- The Struts dispatcher cannot be found. 在页面使用struts2的标签时报的异常
- 51单片机溢出率的计算
- URAL 1424. Minibus (贪心+multiset+multimap+线段树)
- 【Java】IO操作之将Jtable数据导出为Excel表格
- Reactor模式 - @ Pattern by java【转载内容】
- VC 2008 express
- 各类函数类型
- 内核编译例子(hello),Makefile
- Hadoop 伪分布式模式 MapReduce 任务不能继续运行 解决方案
- 快速排序 模板代码 面试
- android错误之Unable to resolve target 'Google Inc.:Google APIs:6'