当前位置: 首页 > news >正文

sgu271 bookpile

http://acm.sgu.ru/problem.php?contest=0&problem=271

n本书支持最上k个反转和加入操作,问最后的结果。

这道题让我想起多校的那道可合并栈,

那道题有两种做法,一种是再开一个栈,合并的时候修改指针并不真的合并,另一种是我用的左偏树。

同样的这题也是,一种做法是利用双端队列,反转并不真的反转,而是改变pop方向,同时再开一个dequeue,

只保留k个数据,另一种做法是splay树。

迷的是手动写deque wa到死,但是stl很好理解,push_front就是堆的增长,pop_back就是堆的k淘汰

 

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<string>
#include<cctype>
#include<queue>
#include<set>
#include<sstream>
#include<map>
using namespace std;
#define FORD(i,k,n) for(int i=n;i>=k;i--)
#define FOR(i,k,n) for(int i=k;i<=n;i++)
#define CLR(a) memset(a,0,sizeof(a));
#define NEG(a) memset(a,-1,sizeof(a));
#define FILL(a) memset(a,0x3f,sizeof(a));
#define INF 0x3f3f3f3f
#define LLINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define LL long long
#define i64 long long
#define u32 unsigned int
#define u64 unsigned long long
#define ptb(b,a){int tmp=a;string s;do{s+=tmp%2+'0';tmp/=2;}while(tmp);reverse(s.begin(),s.end());cout<<"bin "<<b<<"="<<s<<endl;}
#define pta(i,a,f,b) {FOR(i,f,b) cout<<a[i]<<" "; printf("\n");}
#define flgpt(flg,a,b) {if(flg) printf("%s\n",a);else printf("%s\n",b);}
#define pt(a) cout<<a<<endl
#define pt2(a,b) cout<<a<<" "<<b<<endl
#define pt3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
#define pt4(a,b,c,d) cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl
#define ptl cout<<"-------------"<<endl
#define ptl2 cout<<"~~~~~~~~~~~~~~~~"<<endl
#define fp   freopen("in.txt","r",stdin)
#define maxn 1000000


int N,M,K;
deque<string>q;
deque<string>rem;
int main()
{

    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    #endif
    cin>>N>>M>>K;
    FOR(i,1,N)
    {
        string s;
        cin>>s;
        if(q.size()<K)
            q.push_back(s);
        else
            rem.push_back(s);
    }
    // cout<<q.front()<<" "<<q.back()<<endl;
    int flg=1;
    FOR(i,1,M)
    {
        string s;
        cin>>s;
        if(s[0]=='A')
        {
            int ptr=0,ok=0;
            string name;
            while(ptr<s.size())
            {
                if(ok&&s[ptr]!=')')
                {
                    name+=s[ptr];
                }
                if(s[ptr]=='(') ok=1;
                ptr++;
            }
            s=name;

            if(flg)
            {
                if(q.size()<K)
                    q.push_front(s);
                else
                {
                    q.push_front(s);
                    rem.push_front(q.back());
                    q.pop_back();
                    // cout<<q.front()<<" "<<q.back()<<endl;
                }
            }
            else
            {
                if(q.size()<K)
                    q.push_back(s);
                else
                {
                    q.push_back(s);
                    rem.push_front(q.front());
                    // cout<<q.front()<<" "<<q.back()<<endl;
                    q.pop_front();
                    // cout<<q.front()<<":"<<q.back()<<endl;
                }
            }
        }
        else
        {
            flg=1-flg;
        }
        /*FOR(i,Q.s,Q.t-1) cout<<Q.q[i]<<" ";
        puts("");*/
    }
    if(flg)
    while(!q.empty())
    {
        cout<<q.front()<<endl;
        q.pop_front();
    }
    else 
    while(!q.empty())
    {
        cout<<q.back()<<endl;
        q.pop_back();
    }
    while(!rem.empty())
    {
        cout<<rem.front()<<endl;
        rem.pop_front();
    }
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/diang/p/5836920.html

相关文章:

  • 共享库方案解决WAS中JAR包冲突
  • github从入门到放弃(1)
  • hdu 1598 find the most comfortable road(并查集+暴力搜索)
  • lsof命令
  • 操作主机 Schema Master[为企业维护windows server 2008系列九]
  • 配套自测连载(五)
  • 【转】virtualenv -- python虚拟沙盒
  • 能上QQ但不能上网问题精解
  • 使用QRCode简单生成二维码
  • 1、Vagrant初识
  • awk工具(三剑客)
  • SharePoint 2010 服务应用程序(Service Application)架构(1)
  • 【转】微服务架构模式简介
  • Linux输入子系统:多点触控协议 -- multi-touch-protocol.txt【转】
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • [deviceone开发]-do_Webview的基本示例
  • 【RocksDB】TransactionDB源码分析
  • 2018一半小结一波
  • ComponentOne 2017 V2版本正式发布
  • CSS实用技巧干货
  • Date型的使用
  • JavaScript创建对象的四种方式
  • JS数组方法汇总
  • oldjun 检测网站的经验
  • Redis字符串类型内部编码剖析
  • SOFAMosn配置模型
  • SpiderData 2019年2月16日 DApp数据排行榜
  • Unix命令
  • Vue.js 移动端适配之 vw 解决方案
  • 从setTimeout-setInterval看JS线程
  • 订阅Forge Viewer所有的事件
  • 分享一份非常强势的Android面试题
  • 聊聊redis的数据结构的应用
  • 前端学习笔记之观察者模式
  • 前端知识点整理(待续)
  • 强力优化Rancher k8s中国区的使用体验
  • 如何解决微信端直接跳WAP端
  • 我的面试准备过程--容器(更新中)
  • 用mpvue开发微信小程序
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​渐进式Web应用PWA的未来
  • (2)(2.10) LTM telemetry
  • (20050108)又读《平凡的世界》
  • (C语言)fgets与fputs函数详解
  • (function(){})()的分步解析
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (六)vue-router+UI组件库
  • (全注解开发)学习Spring-MVC的第三天
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .Net 4.0并行库实用性演练
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库