題目鏈結
對於i x 操作:
1.把x插入棧a;
2.更新sum[pa]=sum[pa-1]+a[pa];
3.更新f[pa]=max(f[pa-1],sum[pa])。
對於d操作,把a的棧頂出棧。
對於l操作,彈出a的棧頂,插入到b中。
對於r操作:
1.彈出b的棧頂,插入到a中。
2.更新sum[pa]=sum[pa-1]+a[pa];
3.更新f[pa]=max(f[pa-1],sum[pa])。
對於q k詢問,直接返回f[k]。
#include
#include
#include
using
namespace
std;
#define inf 0x3f3f3f3f
#define _rep(i,a,b) for(int i=(a);i<=(b);i++)
const
int n=1e6+10;
int n;
stack
a,b;
int pa,pb;
int sum[n],f[n];
char tmp[5];
int main()
else
if(tmp[0]=='d')a.pop(),pa--;
else
if(tmp[0]=='l'&&!a.empty())b.push(a.top()),a.pop(),pb++,pa--;
else
if(tmp[0]=='r'&&!b.empty())
else
if(tmp[0]=='q')}}
return
0;}
HDU4699 Editor 對頂棧,模擬
hdu4699 editor 大致思路 建立兩個棧a,b。a棧儲存序列開頭到當前游標位置的這一段子串行,b儲存當前游標位置到序列結尾這一段子串行。用陣列f維護棧a的字首和的最大值,sum用來記錄字首和的值。對於操作i,把x插入棧a,並且更新f pa sum pa 的值,對於操作d,把a的棧頂出棧,對...
HDU4699 Editor(雙棧對彈)
題目鏈結 1.題目大意 文字編譯游標。有如下操作 1 每次在游標後插入乙個元素,游標隨即移動到序列尾部 2 在游標前面有元素的情況下刪除游標的前乙個元素 三 如果游標不在序列頭部就將游標左移 四 如果游標不在序列尾部就將游標右移 五 查詢當前游標前的最大字首和 2.第一眼想到,用陣列維護所有元素的字...
hdu 4699 Editor 雙棧維護最長字首
今天上午看了解題報告,突然覺得好簡單,還是接觸的少了,思路不開闊,想不到好的思路。思路 用兩個棧分別維護游標的前後,用陣列記錄游標前的棧的最大字首和!include include include include include include include include include inc...