CloudLunar
主页
知识库
人文社科
自然科学
跨学科领域
热门分类
算法及题库
云璟月's
墨色集(设计)
指尖集(代码)
未央集(随笔)
流觞集(语录)
如花集(书影)
纸鸢集(小说)
登录
B站
微博
人人
开心
Twitter
Facebook
RSS订阅链接
留言板
关于我
在社交网站上关注我
B站
微博
人人
开心
Twitter
Facebook
RSS订阅
RSS订阅链接
留言板
关于我
查看Sgu/296的源代码
←
Sgu/296
因为以下原因,你没有权限编辑本页:
你刚才请求的操作只对属于该用户组的用户开放:
用户
您可以查看并复制此页面的源代码:
[[分类:贪心]] ==摘要== {{信息题|Sasha vs. Kate|http://acm.sgu.ru/problem.php?contest{{=}}0&problem{{=}}296|1|100|k=n-k|3|time=2015-2-19 21:08:48}} (AC 1212) ==题意== 给一个数,求去掉k位后的最大值。 ==题解== *设该数n位,由题意显然是要使得答案的最高位尽量大,即取原数第1位到<small>n-(n-k)+2位(保证后面位数够)</small>之间的最大值,而之后每一位都取上一位位置到<small>n-(n-k)+i+1</small>位的最大值即可。区间最值可以用[[线段树]]处理。 *另一种可行的弹性策略是:每次从最高位遇到非递减的字符则删除(如果整个序列都是递减的,则删除最后一个数),直到够为止。如,19192,遇到连续上升的19则删除一个1,贪心正确性待证明<ref>http://blog.csdn.net/yzbyzz/article/details/9393889</ref><ref>http://www.cppblog.com/willing/archive/2010/05/07/114778.html</ref>。 ==代码== {{折叠|296.cpp代码已折叠 |<pre> #include<cstdio> #include<string> #include<iostream> #include<algorithm> #define si(n) scanf("%d",&n) #define dsi(n) int n;si(n) using namespace std; string str; class ch { public: char p; int index; ch():p(0),index(0){}; friend bool operator <(const ch&a,const ch&b){return a.p==b.p?a.index>b.index:a.p<b.p;} }; template<size_t N> class SegmentTree { //模板:线段树// public: ch tree[N]; #define cm int m=(l+r)>>1 #define lp p<<1 #define rp p<<1|1 #define lc lp,l,m #define rc rp,m+1,r #define stdp int p,int l,int r ch build(stdp) { if(l==r) { tree[p].p=str[l-1]; tree[p].index=l; return tree[p]; } cm; return tree[p]=max(build(lc),build(rc)); } ch query(int L,int R,stdp) { if(L<=l&&r<=R) return tree[p]; ch ret; ret.p=0; cm; if(L<=m)ret=max(query(L,R,lc),ret); if(R>m)ret=max(query(L,R,rc),ret); return ret; } }; SegmentTree<20000> st; int n; int main() { cin>>str; int n=str.size(); st.build(1,1,n); dsi(k); k=n-k;//fixed// string a; int lastIndex=0; for(int i=0;i<k;++i) { ch ret=st.query(lastIndex+1,n-k+i+1,1,1,n); cout<<ret.p; lastIndex=ret.index; } cout<<a; } </pre> |sgu296}} ==参考资料和拓展阅读== <references/>
该页面使用的模板:
模板:=
(
查看源代码
)
模板:信息题
(
查看源代码
)
模板:折叠
(
查看源代码
)
返回
Sgu/296
。
著作权声明
[
编辑
]
除非另有说明,本
网站内容
采用
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
进行许可(中国大陆可以参照
知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议
,如有不同以前者为准)。
如果需要商业化使用,请另联系作者取得授权。
关于
[
编辑
]
联系
@云璟月Lunar
的新浪微博
本站RSS:
RSS链接