• HDU-4699 Editor 数据结构维护


      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4699

      题意:开始有一个光标,每次有5中操作:1,光标当前位置插入一个数,2,光标当前位置删除一个,3,光标向左移一位,4,光标向右移动一位,5,询问前面的数列的最大前缀和。

      由于每次删除的数都是在当前的光标位置,而且询问的前缀和都是在光标前面的位置,因此问题简化了很多,否则要用Splay tree搞了。我们可以直接用一个链表或者两个栈来维护光标以前的最大前缀和,然后直接模拟操作就可以了。。。

     1 //STATUS:C++_AC_671MS_10824KB
     2 #include <functional>
     3 #include <algorithm>
     4 #include <iostream>
     5 //#include <ext/rope>
     6 #include <fstream>
     7 #include <sstream>
     8 #include <iomanip>
     9 #include <numeric>
    10 #include <cstring>
    11 #include <cassert>
    12 #include <cstdio>
    13 #include <string>
    14 #include <vector>
    15 #include <bitset>
    16 #include <queue>
    17 #include <stack>
    18 #include <cmath>
    19 #include <ctime>
    20 #include <list>
    21 #include <set>
    22 #include <map>
    23 using namespace std;
    24 //using namespace __gnu_cxx;
    25 //define
    26 #define pii pair<int,int>
    27 #define mem(a,b) memset(a,b,sizeof(a))
    28 #define lson l,mid,rt<<1
    29 #define rson mid+1,r,rt<<1|1
    30 #define PI acos(-1.0)
    31 //typedef
    32 //typedef __int64 LL;
    33 //typedef unsigned __int64 ULL;
    34 //const
    35 const int N=1000010;
    36 const int INF=0x3f3f3f3f;
    37 const int MOD=100000,STA=8000010;
    38 //const LL LNF=1LL<<60;
    39 const double EPS=1e-8;
    40 const double OO=1e15;
    41 const int dx[4]={-1,0,1,0};
    42 const int dy[4]={0,1,0,-1};
    43 const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    44 //Daily Use ...
    45 inline int sign(double x){return (x>EPS)-(x<-EPS);}
    46 template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
    47 template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
    48 template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
    49 template<class T> inline T Min(T a,T b){return a<b?a:b;}
    50 template<class T> inline T Max(T a,T b){return a>b?a:b;}
    51 template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
    52 template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
    53 template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
    54 template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
    55 //End
    56 
    57 
    58 int sta1[N][3],sta2[N];
    59 int n;
    60 
    61 int main()
    62 {
    63  //   freopen("in.txt","r",stdin);
    64     int i,j,a,top1,top2;
    65     char op[3];
    66     while(~scanf("%d",&n))
    67     {
    68         top1=top2=0;
    69         sta1[0][2]=-INF;
    70         while(n--){
    71             scanf("%s",op);
    72             if(op[0]=='I'){
    73                 scanf("%d",&a);
    74                 sta1[++top1][0]=a;
    75                 sta1[top1][1]=sta1[top1-1][1]+a;
    76                 sta1[top1][2]=Max(sta1[top1][1],sta1[top1-1][2]);
    77             }
    78             else if(op[0]=='D'){
    79                 top1--;
    80             }
    81             else if(op[0]=='L'){
    82                 if(top1<1)continue;
    83                 sta2[++top2]=sta1[top1--][0];
    84             }
    85             else if(op[0]=='R'){
    86                 if(top2<1)continue;
    87                 a=sta2[top2--];
    88                 sta1[++top1][0]=a;
    89                 sta1[top1][1]=sta1[top1-1][1]+a;
    90                 sta1[top1][2]=Max(sta1[top1][1],sta1[top1-1][2]);
    91             }
    92             else {
    93                 scanf("%d
    ",&a);
    94                 printf("%d
    ",sta1[a][2]);
    95             }
    96         }
    97     }
    98     return 0;
    99 }
  • 相关阅读:
    PHP-FPM详解
    Nginx与PHP交互过程 + Nginx与PHP通信的两种方式
    cgi,fast-cgi,php-cgi,php-fpm转载详解
    ( 转 ) mysql复合索引、普通索引总结
    快速搭建ELK日志分析系统
    高并发
    多线程
    关于MySQL中查询大数据量的情况下分页limit的性能优化
    电商搜索引擎的架构设计和性能优化
    MYSQL优化之碎片整理
  • 原文地址:https://www.cnblogs.com/zhsl/p/3275813.html
Copyright © 2020-2023  润新知