JZOJ 4867 【NOIP2016提高A组集训第8场11.5】心理学概论
来源:互联网 发布:jdk 1.8 linux tar gz 编辑:程序博客网 时间:2024/05/11 12:04
心理学概论
题目大意
给出
<1>把
<2>把
<3>把
定义一个组的的代价为加入进该组的元素的最大值,问三组代价之和的最小值。
数据范围
对于100%的数据,
题解
首先先考虑以下二元组{
那现在由二元组换成三元组,一样的思想,按照
假如选择了第
从大到小枚举
线段树维护三个值:该段区间内
Code(Pascal)
const maxn=maxlongint;var tr:array[0..4000000,1..5] of int64; ba:array[0..200000,1..3] of int64; pa:array[0..200000,1..2] of longint; d:array[0..150000] of longint; la:array[0..4000000] of int64; n,m,j,k,l,i,wz:longint; o,oo,ans,kk:int64;function min(a,b:int64):int64; begin if a<b then exit(a) else exit(b); end;function max(a,b:int64):int64; begin if a>b then exit(a) else exit(b); end;procedure qsort(l,r:longint); var i,j,m:longint; begin i:=l; j:=r; m:=ba[(l+r) div 2,1]; repeat while ba[i,1]<m do inc(i); while ba[j,1]>m do dec(j); if i<=j then begin ba[0]:=ba[i]; ba[i]:=ba[j]; ba[j]:=ba[0]; inc(i); dec(j); end; until i>j; if l<j then qsort(l,j); if i<r then qsort(i,r); end;procedure qsortll(l,r:longint); var i,j,m:longint; begin i:=l; j:=r; m:=pa[(l+r) div 2,1]; repeat while pa[i,1]<m do inc(i); while pa[j,1]>m do dec(j); if i<=j then begin pa[0]:=pa[i]; pa[i]:=pa[j]; pa[j]:=pa[0]; inc(i); dec(j); end; until i>j; if l<j then qsortll(l,j); if i<r then qsortll(i,r); end;procedure jl(o,l,r:longint); var mid:longint; begin tr[o,1]:=maxn; tr[o,2]:=0; tr[o,3]:=maxn; if l=r then exit; mid:=(l+r) div 2; jl(o*2,l,mid); jl(o*2+1,mid+1,r); end;procedure down(o:longint); begin tr[o*2,2]:=la[o]; tr[o*2+1,2]:=la[o]; tr[o*2,3]:=tr[o*2,1]+la[o]; tr[o*2+1,3]:=tr[o*2+1,1]+la[o]; la[o*2]:=la[o]; la[o*2+1]:=la[o]; la[o]:=0; end;procedure up(o:longint); var ls,rs:longint; begin ls:=o*2; rs:=ls+1; tr[o,1]:=min(tr[ls,1],tr[rs,1]); tr[o,2]:=min(tr[ls,2],tr[rs,2]); tr[o,3]:=min(tr[ls,3],tr[rs,3]); end;function xz(o,l,r,kk:longint):longint; var mid:longint; begin if l=r then exit(l); mid:=(l+r) div 2; if la[o]>0 then down(o); if tr[o*2,2]<kk then exit(xz(o*2,l,mid,kk)) else exit(xz(o*2+1,mid+1,r,kk)); up(o); end;function gx(o,l,r,ll,rr,bh:int64):int64; var mid,ls,rs:longint; begin if (l=ll) and (r=rr) then begin la[o]:=bh; tr[o,2]:=la[o]; tr[o,3]:=tr[o,1]+la[o]; exit; end; if la[o]>0 then down(o); mid:=(l+r) div 2; ls:=o*2; rs:=ls+1; if rr<=mid then gx(ls,l,mid,ll,rr,bh) else if ll>mid then gx(rs,mid+1,r,ll,rr,bh) else begin gx(ls,l,mid,ll,mid,bh); gx(rs,mid+1,r,mid+1,rr,bh); end; up(o); end;procedure ddxg(o,l,r,kk:int64); var mid:longint; begin if l=r then begin tr[o,1]:=d[kk]; tr[o,3]:=d[kk]+tr[o,2]; exit; end; mid:=(l+r) div 2; if la[o]>0 then down(o); if kk<=mid then ddxg(o*2,l,mid,kk) else ddxg(o*2+1,mid+1,r,kk); up(o); end;begin assign(input,'psy.in'); reset(input); assign(output,'psy.out'); rewrite(output); readln(n); for i:=1 to n do readln(ba[i,1],ba[i,2],ba[i,3]); qsort(1,n); ans:=ba[n,1]; for i:=1 to n do begin pa[i,1]:=ba[i,2]; pa[i,2]:=i; end; qsortll(1,n); oo:=1; kk:=0; for i:=1 to n do if pa[i,1]<>kk then begin inc(oo); d[oo]:=pa[i,1]; kk:=pa[i,1]; ba[pa[i,2],2]:=oo; end else ba[pa[i,2],2]:=oo; jl(1,1,oo); d[0]:=0; ddxg(1,1,oo,1); ba[0,1]:=0; for i:=n downto 1 do begin if ba[i,2]<>1 then begin wz:=xz(1,1,oo,ba[i,3]); if wz<ba[i,2] then gx(1,1,oo,wz,ba[i,2]-1,ba[i,3]); end; ddxg(1,1,oo,ba[i,2]); ans:=min(ans,ba[i-1,1]+tr[1,3]); end; writeln(ans);end.
- JZOJ 4867 【NOIP2016提高A组集训第8场11.5】心理学概论
- 【NOIP2016提高A组集训第8场11.5】心理学概论
- JZOJ4867【NOIP2016提高A组集训第8场11.5】心理学概论
- JZOJ 4866. 【NOIP2016提高A组集训第8场11.5】禅与园林艺术
- JZOJ 4866 【NOIP2016提高A组集训第8场11.5】禅与园林艺术
- NOIP2016提高A组集训第8场11.5 总结
- NOIP2016提高A组集训第8场11.5总结
- JZOJ 4823. 【NOIP2016提高A组集训第1场10.29】小W学物理
- JZOJ 4822. 【NOIP2016提高A组集训第1场10.29】完美标号
- JZOJ 4822. 【NOIP2016提高A组集训第1场10.29】完美标号
- jzoj 4831. 【NOIP2016提高A组集训第3场10.31】方程式 多项式除法 数学
- jzoj 4833. 【NOIP2016提高A组集训第3场10.31】Mahjong dfs+暴力
- JZOJ 4822 【NOIP2016提高A组集训第1场10.29】完美标号
- JZOJ 4823 【NOIP2016提高A组集训第1场10.29】小W学物理
- JZOJ 4841【NOIP2016提高A组集训第4场】平衡的子集
- JZOJ 4824. 【NOIP2016提高A组集训第1场10.29】配对游戏
- jzoj 4861. 【NOIP2016提高A组集训第7场11.4】推冰块 模拟+bfs+二分
- JZOJ 4845 【NOIP2016提高A组集训第5场11.2】寻找
- 11.9 模拟题
- 利用递归函数逆序一个栈(C语言实现)
- 关于字符串gets()和scanf("%s")和getchar()的用法
- Android 之Mac studio查看SHA1和MD5
- 跟我一起读postgresql源码(二)——Parser(查询分析模块)
- JZOJ 4867 【NOIP2016提高A组集训第8场11.5】心理学概论
- Oracle ERP 常用查询:SLA详解
- C++ String类的实现
- 栈和队列(7)-- 生成窗口最大值数组
- noip2015day1 T1神奇的幻方
- [osg]源码分析:osg::Vec3, osg::Vec3f
- 桶排序
- 【Oracle】锁与数据库对象
- CODE[VS] 2594 解药还是毒药【状压BFS】