Ejemplo n.º 1
0
void func(deque<char>& stack, int left, int right, vector<string>& result)
{
	if(left == 0 && right == 0)
	{
		result.push_back(string(stack.begin(),stack.end()));
		return;
	}

	if(left > right)
		return;
	
	if(left > 0)
	{
		stack.push_back('(');
		func(stack,left-1,right,result);
		stack.pop_back();
	}

	if(right > 0)
	{
		stack.push_back(')');
		func(stack,left,right-1,result);
		stack.pop_back();
	}
}
Ejemplo n.º 2
0
int main()
{
    int n,m,k;
    int ans,now;
    while (~scanf("%d%d%d",&n,&m,&k))
    {
        ans=0;
        now=0;
        q1.clear();
        q2.clear();
        REP(i,n)
        {
            scanf("%d",&a[i]);
            while (!q1.empty()&&q1.back().first<=a[i]) q1.pop_back();
            q1.push_back(mp(a[i],i));
            while (!q2.empty()&&q2.back().first>=a[i]) q2.pop_back();
            q2.push_back(mp(a[i],i));
            while (!q1.empty()&&!q2.empty()&&q1.front().first-q2.front().first>k)
            {
                if (q1.front().second<q2.front().second)
                {
                    now=q1.front().second+1;
                    q1.pop_front();
                }
                else
                {
                    now=q2.front().second+1;
                    q2.pop_front();
                }
            }
            if (!q1.empty()&&!q2.empty()&&q1.front().first-q2.front().first>=m)
                ans=max(ans,i-now+1);
        }
        printf("%d\n",ans);
    }
Ejemplo n.º 3
0
int main(){
	scanf("%d",&N);
	for(int i=0;i<N;i++){
		scanf("%d%d",&X[i],&H[i]);
		D.push_back( i );
	}
	int ans = 0;
	lr = MAXL, ll = -MAXL;
	while(!D.empty()){
		while(!D.empty() && ll < X[D.front()] - H[D.front()]){
			ans++; ll = X[D.front()]; D.pop_front();
		}
		while(!D.empty() && X[D.back()] + H[D.back()] < lr){
			ans++; lr = X[D.back()]; D.pop_back();
		}
		if(!D.empty()) ll = X[D.front()], lr = X[D.back()];
		// two sides CANNOT be cut outside
		if(!D.empty() && X[D.front()] + H[D.front()] < ( D.size() == 1 ? lr : X[D.front()+1] ) ){
			ans++; ll = X[D.front()] + H[D.front()];
		}
		if(!D.empty() && X[D.back()] - H[D.back()] > ( D.size() == 1 ? ll : X[D.back()-1] ) ){
			ans++; lr = X[D.back()] - H[D.back()];
		}
		if(!D.empty()) D.pop_front();
		if(!D.empty()) D.pop_back();
	}
	printf("%d",ans);
	return 0;
}
Ejemplo n.º 4
0
void checkBounds()
{
    if ((trialMode!=PROBEMODE) )
    {
        conditionInside = ((projPoint - Vector3d(0,0,focalDistance) ).norm()) <= (circleRadius-2.5) ; // here we subtract 4 to work with trianglewave precision
        // If this condition is met, then this means that the point is outside the screen area!
        if ( !( conditionInside || (!wasInside) ) )
        {
            switch ( (int) factors["Anchored"] )
            {
            case 0:	//anchored x
                signsX.pop_back();
                signsX.push_front( factors["Onset"]* projPoint.x() > 0 );
                if ( (signsX.front() != signsX.back() ) )
                    sumOutside++;
                break;
            case 1:	//anchored x
                signsX.pop_back();
                signsX.push_front( factors["Onset"]* projPoint.x() > 0 );
                if ( (signsX.front() != signsX.back() ) )
                    sumOutside++;
                break;
            case 2:	//anchored y
                signsY.pop_back();
                signsY.push_front( factors["Onset"]*projPoint.y() > 0 );
                if ( (signsY.front() != signsY.back() ) )
                    sumOutside++;
                break;
            }
        }
        wasInside = conditionInside;
    }
}
Ejemplo n.º 5
0
void dfs(int v) {

    vector<int> l1, l2;
    while (dq.size() and deep[dq.back()] < deep[v]) {
        l1.PB(dq.back());
        dq.pop_back();
    }
    dq.push_back(v);
    ans[v] = dq[0];
    //cout << v << ' ' << dq[0] << endl;
    for (auto x: el[v]) {
        while (dq.size() and deep[dq[0]] < x) {
            l2.PB(dq[0]);
            dq.pop_front();
        }
        dfs(x);
        while (l2.size()) {
            dq.push_front(l2.back());
            l2.pop_back();
        }
    }
    dq.pop_back();
    while (l1.size()) {
        dq.push_back(l1.back());
        l1.pop_back();
    }
}
Ejemplo n.º 6
0
void init(){
	
	while(!que.empty())que.pop_back();

	LL sum=str0[n-1];
	int now=n-1,tmp;
	que.push_back(n-1);
	
	for(int i=n-2;i>=0;i--){
		
		sum+=str0[i];
		while(sum>m){
			myleft[now]=i;
			sum-=str0[now];now--;
		}
		
		tmp=que.back();
		while(str0[i]>=str0[tmp]){
		//	printf("%d > %d\n",i,tmp);
			next[tmp]=i;que.pop_back();	
			if(!que.empty())tmp=que.back();
			else break;		
		}
		que.push_back(i);
		
	}
	while(now>=0)myleft[now--]=-1;
	while(!que.empty()){
		tmp=que.back();que.pop_back();
		next[tmp]=-1;
	}
	
}
Ejemplo n.º 7
0
int main()
{
    int N, W; scanf("%d%d", &N, &W);
    for(int i=0; i<N; ++i) {
        scanf("%d", vals + i);
    }

    int ans=0;
    if (W==1) { printf("%d\n", N); return 0; }

    minque.push_back(pii(vals[0], 0));
    maxque.push_back(pii(vals[0], 0));
    for(int i=1; i<N; ++i) {
        if (minque.front().second <= i-W) minque.pop_front();
        if (maxque.front().second <= i-W) maxque.pop_front();
        while(!minque.empty() && vals[i] <= minque.back().first) {
            minque.pop_back();
        }
        minque.push_back(pii(vals[i], i));
        while(!maxque.empty() && vals[i] >= maxque.back().first) {
            maxque.pop_back();
        }
        maxque.push_back(pii(vals[i], i));
        if (i>=W-1) {
            int mm, xx;
            mm = minque.front().first;
            xx = maxque.front().first; //printf("%d %d\n", mm, xx);
            if (xx - mm == W-1) ans++;
        }
    }
    printf("%d\n", ans);
}
Ejemplo n.º 8
0
Archivo: J.cpp Proyecto: mrain/acm
bool check(int x)
{
	v.clear();
	for(int i=0;i<n;++i)
		v.push_back(hf(p[i],p[(i+x)%n]));
	//stable_sort(v.begin(),v.end(),cmp);
	static deque<hf> q;
	static deque<point> ans;
	q.clear(), ans.clear();
	q.push_back(v[0]);
	for(int i=1;i<(int)v.size();++i){
		//if(sgn(ang(v[i].B-v[i].A)-ang(v[i-1].B-v[i-1].A))==0)continue;
		while(ans.size()&&!satisfy(ans.back(),v[i]))
			ans.pop_back(),q.pop_back();
		while(ans.size()&&!satisfy(ans.front(),v[i]))
			ans.pop_front(),q.pop_front();
		if(parallel(q.back(),v[i]))return false;
		ans.push_back(intersect(q.back(),v[i]));
		q.push_back(v[i]);
	}
	while(ans.size()&&!satisfy(ans.back(),q.front()))
		ans.pop_back(),q.pop_back();
	if(parallel(q.back(),q.front()))return false;
	ans.push_back(intersect(q.back(),q.front()));
	double ret=cross(ans.back(),ans.front());
	for(int i=0;i<(int)ans.size()-1;++i)
		ret+=cross(ans[i],ans[i+1]);
	return fabs(ret)>=eps;
//	return OK;
}
Ejemplo n.º 9
0
void solve()
{
    int sol = -1, st;
    int m, l = X, r = Y, g;
    while( l<=r ) {
        m = (l+r)>>1; g = 0;
        q.clear(); q2.clear();
        for(int i=1; i<=N; i++) {
            while( !q.empty() && A[i]<A[q.back()] ) q.pop_back(); //min
            q.push_back(i);
            while( !q2.empty() && A[i]>A[q2.back()] ) q2.pop_back(); //max
            q2.push_back(i);
            if( i<m ) continue;
            if( A[q2.front()]-A[q.front()]<=Z && m>=sol ) {
                sol = m; st = i-m+1;
                g = 1;
            }
            while( i-q.front()+1==m ) q.pop_front();
            while( i-q2.front()+1==m ) q2.pop_front();
        }
        if(g) l = m+1;
        else r = m-1;
    }

    sol == -1 ? printf("-1") : printf("%d %d %d", sol, st, st+sol-1);
}
Ejemplo n.º 10
0
Archivo: B.cpp Proyecto: Fengdalu/ICPC
void calc()
{
    LL x = q1.back(); q1.pop_back();
    LL y = q1.back(); q1.pop_back();
    char op = q2.back(); q2.pop_back();
    if(op == '*') q1.push_back(x * y); else q1.push_back(x + y);
}
Ejemplo n.º 11
0
int main(){	
	int m=0;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		double x_1,y_1,x_2,y_2;
		scanf("%lf%lf%lf%lf",&x_1,&y_1,&x_2,&y_2);
		l[m++]=line(point(x_1,y_1),point(x_2-x_1,y_2-y_1));l[m-1].get();
	}
	l[m++]=line(point(0,0),point(1,0));l[m-1].get();
	l[m++]=line(point(10000,0),point(0,1));l[m-1].get();
	l[m++]=line(point(10000,10000),point(-1,0));l[m-1].get();
	l[m++]=line(point(0,10000),point(0,-1));l[m-1].get();
	sort(l,l+m);
	dq.push_back(l[0]);dq.push_back(l[1]);
	for(int i=2;i<m;i++){
		while(dq.size()>1&&!Onleft(dq.back()*dq[dq.size()-2],l[i]))
			dq.pop_back();
		while(dq.size()>1&&!Onleft(dq.front()*dq[1],l[i]))
			dq.pop_front();
		dq.push_back(l[i]);
	}while(dq.size()>1&&!Onleft(dq.back()*dq[dq.size()-2],dq.front()))
		dq.pop_back();
	while(dq.size()>1&&!Onleft(dq.front()*dq[1],dq.back()))
		dq.pop_front();
	vector<point>vec;
	for(int i=0;i<dq.size();i++)vec.push_back(dq[i]*dq[(i+1)%dq.size()]);
	double ans=0;
	for(int i=1;i+1<vec.size();i++){
		ans+=(vec[i]-vec[0])*(vec[i+1]-vec[0]);
	}printf("%.1lf\n",fabs(ans/2));
	return 0;
}
Ejemplo n.º 12
0
void Styler_Syntax::GetSubSymbols(unsigned int offset, const submatch& sm, deque<const wxString*>& scopes, vector<SymbolRef>& symbols) const {
	for (auto_vector<stxmatch>::const_iterator p = sm.matches.begin(); p != sm.matches.end(); ++p) {
		const stxmatch& m = *(*p);

		if (!m.m_name.empty()) {
			// Add new scope
			scopes.push_back( &m.m_name );

			// Check for matching symbol
			const wxString* transform;
			if (m_syntaxHandler->ShowSymbol(scopes, transform)) {
				const SymbolRef sr = {offset+m.start, offset+m.end, transform};
				symbols.push_back(sr);

				scopes.pop_back();
				continue;
			}
		}

		if (m.subMatch.get()) {
			// Go into subscopes
			GetSubSymbols(offset + m.start, *m.subMatch, scopes, symbols);
		}

		if (!m.m_name.empty()) {
			// Remove current scope
			scopes.pop_back();
		}
	}
}
Ejemplo n.º 13
0
Archivo: J.cpp Proyecto: Fengdalu/ICPC
bool dfs(int p)
{
    if(p == len) return true;
    int x;
    x = s[p]- '0';
    if(x <= n && !vis[x])
    {
        f.PB(x);
        vis[x] = true;
        if(dfs(p + 1)) return true;
        f.pop_back();
        vis[x] = false;
    }
    if(p + 1 < len)
    {
        x = (s[p] - '0') * 10 + s[p + 1] - '0';
        if(x <= n && !vis[x])
        {
            f.PB(x);
            vis[x] = true;
            if(dfs(p + 2)) return true;
            f.pop_back();
            vis[x] = false;
        }
    }
    return false;
}
Ejemplo n.º 14
0
int main(){
    scanf("%d",&n);
    for (int i=1; i<=n; i++) {
        scanf("%d",&a[i]);
        a[i] += a[i-1];
    }
    for (int i=1; i<=n; i++) {
        px[i-1] = f(i - (n-1) / 2,i);
    }
    for (int i=0; i<n+(n-1)/2; i++) {
        if(!num.empty() && num.front() == i - (n+1)/2){
            num.pop_front();
            dq.pop_front();
        }
        while (!dq.empty() && dq.back() > px[i%n]) {
            num.pop_back();
            dq.pop_back();
        }
        dq.push_back(px[i%n]);
        num.push_back(i);
        if(i - (n-1)/2 >= 0){
            qx[i - (n-1)/2] = dq.front();
        }
    }
    printf("%d",*max_element(qx,qx+n));
}
Ejemplo n.º 15
0
int main(){
    while(T-- && ~(scanf("%d",&N))){
        qmax.clear();
        qmin.clear();
        int ans = 0;
        int l = 1;
        for (int i = 1;i <= N;i++){
            scanf("%d",&tmp.val);
            tmp.num = i;
            while(!qmax.empty() && tmp.val > qmax.back().val) qmax.pop_back();
            qmax.push_back(tmp);
            while(!qmin.empty() && tmp.val < qmin.back().val) qmin.pop_back();
            qmin.push_back(tmp);
            while(qmax.front().val-qmin.front().val > 1){
                if (qmax.front().num > qmin.front().num){
                    l = max(l,qmin.front().num+1);
                    qmin.pop_front();
                }
                else if (qmax.front().num < qmin.front().num){
                    l = max(l,qmax.front().num+1);
                    qmax.pop_front();
                }
                else{
                    l = max(l,qmax.front().num+1);
                    qmin.pop_front(), qmax.pop_front();
                }
            }
            ans = max(ans,i-l+1);
        }
        printf("%d\n",ans);
    }
    return 0;
}
Ejemplo n.º 16
0
int main(){
	scanf("%d %d",&n,&l);
	for (int i=0; i<n; i++) {
		scanf("%d %d",&a[i].first, &a[i].second);
		a[i].second = abs(a[i].second);
	}
	sort(a, a+n);
	for (int i=0; i<n; ) {
		int e = i;
		while(e < n && a[e].first == a[i].first) e++;
		while (stk.size() >= 2 && cross(stk[stk.size()-2], stk.back()) > cross(stk.back(), a[i])) {
			stk.pop_back();
		}
		stk.push_back(a[i]);
		i = e;
	}
	double ret = 0;
	while(stk.size() >= 2 && cross(stk[0], stk[1]) < 0) stk.pop_front();
	while(stk.size() >= 2 && cross(stk[stk.size()-2], stk.back()) > l) stk.pop_back();
	ret = max(ret, solve(0, cross(stk[0], stk[1]), stk[0]));
	ret = max(ret, solve(cross(stk[stk.size()-2], stk.back()), l, stk.back()));
	for(int i=1; i+1<stk.size(); i++){
		ret = max(ret, solve(cross(stk[i-1], stk[i]), cross(stk[i], stk[i+1]), stk[i]));
	}
	printf("%lf",ret);
}
Ejemplo n.º 17
0
int main()
{
	//freopen("input.txt","r",stdin);
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;++i) scanf("%d",s+i);
	if(k == 1)
	{
		printf("%d\n",n);
		return 0;
	}
	--k;
	SA();
//	for(int i=1;i<=n;++i) printf("%d\n",height[i]);
	int ans = 0;
	for(int i=1;i<=k;++i)
	{
		while(q.size() && q.back() > height[i]) q.pop_back();
		q.push_back(height[i]);
	}
	ans = q.front();
	for(int i=2,j=k+1;j<=n;++i,++j)
	{
		if(height[i-1] == q.front()) q.pop_front();
		while(q.size() && q.back() > height[j]) q.pop_back();
		q.push_back(height[j]);
		if(q.size()) ans = max(ans,q.front());
	}
	printf("%d\n",ans);
	return 0;
}
Ejemplo n.º 18
0
int main(){
	scanf("%d %d %d %d %d %d", &m, &n, &a, &b, &c, &d);

	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			scanf("%d", &g[i][j]);

	for (int i = n; i >= 1; i--)
		for (int j = m; j >= 1; j--)
			s[i][j] = g[i][j] + s[i+1][j] + s[i][j+1] - s[i+1][j+1];

	for (int i = 2; i+d <= n; i++){
		q.clear();

		int j;
		for (j = 2; j+c < a; j++){
			while (!q.empty() && q.back().fst > inner(i,j))
				q.pop_back();
			q.push_back(mp(inner(i,j), mp(i,j)));
		}

		for (; j+c <= m; j++){
			if (j-a+c+1 > 1 && q.front().fst == inner(i, j-a+c+1))
				q.pop_front();
			while (!q.empty() && q.back().fst > inner(i,j))
				q.pop_back();
			q.push_back(mp(inner(i,j), mp(i,j)));
			h[i][j-a+c+2] = q.front();
		}
	}

	auto best = mp(-1, mp(mp(0,0), mp(0,0)));
	for (int j = 1; j+a <= m+1; j++){
		q.clear();

		for (int i = 2; i+d < b; i++){
			while (!q.empty() && q.back().fst > h[i][j+1].fst)
				q.pop_back();
			q.push_back(h[i][j+1]);
		}

		for (int i = 1; i+b <= n+1; i++){
			if (i > 1 && q.front().fst == h[i][j+1].fst)
				q.pop_front();
			while (!q.empty() && q.back().fst > h[i+b-d-1][j+1].fst)
				q.pop_back();

			q.push_back(h[i+b-d-1][j+1]);
			auto z = q.front();

			best = max(best,
			           mp(outer(i,j) - z.fst, mp(mp(i,j), z.snd))
				  );
		}
	}

	printf("%d %d\n%d %d\n", best.snd.fst.snd, best.snd.fst.fst, best.snd.snd.snd, best.snd.snd.fst);
}
Ejemplo n.º 19
0
inline void remove(int pos, int val) {
    while (!mx.empty() && mx.front().second <= pos) mx.pop_front();
    while (!mn.empty() && mn.front().second <= pos) mn.pop_front();
    while (!mx.empty() && mx.back().second <= pos) mx.pop_back();
    while (!mn.empty() && mn.back().second <= pos) mn.pop_back();
    if (mx.front().first - mn.front().first <= 1) {
        res = max(res, r - l - 1);
    }
}
Ejemplo n.º 20
0
int main()
{
    scanf("%s%d",table+1,&k);len=strlen(table+1);
    for(int i=1;i<=len;i++)
    {
        if(isalpha(table[i]))
        {
            if(!vis[table[i]-'a'])k--;
            vis[table[i]-'a']=1;
        }else
        {
            if(i&1)odd++,odd_que.push(i);else even++,even_que.push(i);
        }
    }
    for(int i=0;i<=25;i++)if(!vis[i])dq.push_back(i);
    if(even+odd<k)
    {
        printf("-1\n");
        return 0;
    }
    int cnt=0;
    while(cnt<k)
    {
        if(26-dq.front()>dq.back())
        {
            if(!even_que.empty())
            {
                table[even_que.front()]=dq.front()+'a';
                even_que.pop();dq.pop_front();cnt++;
            }else
            {
                table[odd_que.front()]=dq.back()+'a';
                odd_que.pop();dq.pop_back();cnt++;
            }
        }else
        {
            if(!odd_que.empty())
            {
                table[odd_que.front()]=dq.back()+'a';
                odd_que.pop();dq.pop_back();cnt++;
            }else
            {
                table[even_que.front()]=dq.front()+'a';
                even_que.pop();dq.pop_front();cnt++;
            }
        }
    }
    for(int i=1;i<=len;i++)
    {
        if(table[i]=='?')
        {
            if(i&1)table[i]='z';else table[i]='a';
        }
    }
    printf("%s\n",table+1);
    return 0;
}
Ejemplo n.º 21
0
int main() {
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
    }
    for (int i = 1; i < k; ++i) {
        Node t;
        t.id = i;
        t.num = a[i];
        while (!deq.empty() && deq.back().num >= t.num) {
            deq.pop_back();
        }
        deq.push_back(t);
    }
    for (int i = k; i <= n; ++i) {
        Node t;
        t.id = i;
        t.num = a[i];
        while (!deq.empty() && deq.back().num >= t.num) {
            deq.pop_back();
        }
        deq.push_back(t);
        while (!deq.empty() && deq.front().id <= i - k) {
            deq.pop_front();
        }
        printf("%d ",deq.front().num);
    }
    printf("\n");
    deq.clear();
    for (int i = 1; i < k; ++i) {
        Node t;
        t.id = i;
        t.num = a[i];
        while (!deq.empty() && deq.back().num <= t.num) {
            deq.pop_back();
        }
        deq.push_back(t);
    }
    for (int i = k; i <= n; ++i) {
        Node t;
        t.id = i;
        t.num = a[i];
        while (!deq.empty() && deq.back().num <= t.num) {
            deq.pop_back();
        }
        deq.push_back(t);
        while (!deq.empty() && deq.front().id <= i - k) {
            deq.pop_front();
        }
        printf("%d ",deq.front().num);
    }
    printf("\n");
    return 0;
}
Ejemplo n.º 22
0
inline void add(int pos, int val) {
    while (!mx.empty() && (val >= mx.back().first || mx.back().second < l)) mx.pop_back();
    while (!mx.empty() && mx.front().second < l) mx.pop_front();
    mx.push_back({val, pos});
    while (!mn.empty() && (val <= mn.back().first || mn.back().second < l)) mn.pop_back();
    while (!mn.empty() && mn.front().second < l) mn.pop_front();
    mn.push_back({val, pos});
    if (mx.front().first - mn.front().first <= 1) {
        res = max(res, r - l + 1);
    }
}
Ejemplo n.º 23
0
Archivo: 1004.cpp Proyecto: nansun/acm
void generate_sequences(string src,
			int pos,
		       	stack<char> stk,
		       	deque<string> seq,
			string tmp,
			string dst)
{
    if (pos==src.size() && stk.empty() && tmp==dst)
    {
	while (!seq.empty())
	{
	    cout<<seq.front();
	    seq.pop_front();
	}

	cout<<endl;

	return;
    }

    if (pos<src.size())
    {
	// push
	stk.push(src[pos++]);
	seq.push_back("i ");

	// continue
	generate_sequences(src, pos, stk, seq, tmp, dst);

	// roll back
	seq.pop_back();
	pos--;
	stk.pop();
    }

    if (!stk.empty() && dst.find(tmp+stk.top())==0)
    {
	// pop
	tmp+=stk.top();
	stk.pop();
	seq.push_back("o ");

	// continue
	generate_sequences(src, pos, stk, seq, tmp, dst);
	
	// roll back
	seq.pop_back();
	stk.push(tmp[tmp.size()-1]);
	tmp.erase(tmp.end()-1);
    }

    return;
}
void Solver() //This function solves the RPNEquation
{
	double answer;
	while (!RPNEquation.empty())//While there's still tokens in the RPN equation.
	{
		bool tokenProcessed = false; //Flag to ensure only one token gets processed per cycle of the parent while loop.
		if (isdigit(RPNEquation.front().at(0)) && tokenProcessed == false) //If the front token is a number.
		{
			SolverStack.push_back(atof(RPNEquation.front().c_str())); //Pushed the numeric string, converted to an int, on to the solver.
			RPNEquation.pop_front();
			tokenProcessed = true;
		}
		if (!RPNEquation.empty() && tokenProcessed == false) //If the front token is not a number...
		{
			double secondOperand = SolverStack.back(); //These four lines pop out the right numbers from the stack to be processed.
			SolverStack.pop_back();
			double firstOperand = SolverStack.back();
			SolverStack.pop_back();

			if (tokenProcessed == false && RPNEquation.front().compare("+") == 0)
			{
				answer = firstOperand + secondOperand; //Solve, push to stack, pop old token and flag processing.
				SolverStack.push_back(answer);
				RPNEquation.pop_front();
				tokenProcessed = true;
			}
			if (tokenProcessed == false && RPNEquation.front().compare("-") == 0)
			{
				answer = firstOperand - secondOperand; //Solve, push to stack, pop old token and flag processing.
				SolverStack.push_back(answer);
				RPNEquation.pop_front();
				tokenProcessed = true;
			}
			if (tokenProcessed == false && RPNEquation.front().compare("*") == 0)
			{
				answer = firstOperand * secondOperand; //Solve, push to stack, pop old token and flag processing.
				SolverStack.push_back(answer);
				RPNEquation.pop_front();
				tokenProcessed = true;
			}
			if (tokenProcessed == false && RPNEquation.front().compare("/") == 0)
			{
				answer = firstOperand / secondOperand; //Solve, push to stack, pop old token and flag processing.
				SolverStack.push_back(answer);
				RPNEquation.pop_front();
				tokenProcessed = true;
			}
		}
	}
	cout << "The solution to that equation is:\n\n"; //Outputs the tokens for testing purposes.
	cout << "	" << SolverStack.back();
}
Ejemplo n.º 25
0
int main()
{
	while(EOF!=scanf("%d %d",&N,&F))
	{
		sum[0]=0;opt=0;
		for(i=1;i<=N;++i)
		{
			scanf("%d",&a[i]);
			if(a[i]>opt)
				opt=a[i];
			sum[i]=sum[i-1]+a[i];
		}
		if(F==1)
		{
			printf("%d\n",1000*opt);
			continue;
		}
		cnt.x=0,cnt.y=0;
		q.push_front(cnt);
		cnt.x=1,cnt.y=sum[1];
		q.push_front(cnt);
		opt=(1000*sum[F])/F;
		if((1000*sum[F+1])/(F+1)>opt)
			opt=(1000*sum[F+1])/(F+1);
	    if((1000*(sum[F+1]-sum[1]))/F>opt)
			opt=(1000*(sum[F+1]-sum[1]))/F;
		for(i=F+2;i<=N;++i)
		{
		    cnt.x=i-F,cnt.y=sum[i-F];
			while(test());
			q.push_front(cnt);
			s=q.back();q.pop_back();
			cnt.x=i,cnt.y=sum[i];//寻找最优值。。。。
			last=(1000*(cnt.y-s.y))/(cnt.x-s.x);
			while(!q.empty())
			{
               t=q.back();
			   if((1000*(cnt.y-t.y))/(cnt.x-t.x)>last)
				   last=(1000*(cnt.y-t.y))/(cnt.x-t.x),q.pop_back(),s=t;
			   else
			   {
				   q.push_back(s);
				   break;
			   }
			}
			if(last>opt)
				opt=last;
		}
		printf("%d\n",opt);
	}
	return 0;
}
Ejemplo n.º 26
0
void mover(map<unsigned char, deque<bool>> &m, deque<bool> &tmp, Node* tree){
	if(tree->isLeaf){
		m[tree->symbol] = tmp;
		tmp.pop_back();
	}else{
		tmp.push_back(false);
		mover(m, tmp, tree->left);
		tmp.push_back(true);
		mover(m, tmp, tree->right);
		if(!tmp.empty())
			tmp.pop_back();
	}

}
Ejemplo n.º 27
0
void shrink(deque<string>& tok,const set<string>& dirs){
  string key = tok2str(tok);
  if(tok.size() >= 1 && tok[tok.size()-1] == "/"){
    tok.pop_back();
    return;
  }
  else if(tok.size() >= 2
	  && tok[tok.size()-1] == "index.html"
	  && dirs.find(key + "/") == dirs.end()){
    tok.pop_back();
    tok.pop_back();
    return;
  }
}
Ejemplo n.º 28
0
int main()
{
	read(n);
	for(int i=1;i<=n;i++)
		read(pos[i]),read(len[i]);
	read(m);
	for(int i=1,u,v;i<=m;i++)
	{
		read(u),read(v);
		qu[v].pb(mp(u,i));
	}
	build(1,1,n);
	for(int k=2;k<=n;k++)
	{
		while(!deq.empty())
		{
			int id=deq.back();
			if(len[id]+pos[id] <= len[k-1]+pos[k-1])
				deq.pop_back();
			else
				break;
		}
		bool flag=0;
		deq.push_back(k-1);
		while(!deq.empty())
		{
			int id=deq.back();
			if(len[id]+pos[id] >= pos[k])
				break;
			deq.pop_back();
			int last=0,temp=pos[k]-len[id]-pos[id];
			if(!deq.empty())
				last=deq.back();
			update(1,last+1,id,temp);
			len[id]+=temp;
			flag=1;
		}
		if(flag)
			deq.push_back(k-1);
		for(int i=0;i<qu[k].size();i++)
		{
			int last=qu[k][i].first;
			int temp=qu[k][i].second;
			ans[temp]=query(1,last);
		}
	}
	for(int i=1;i<=m;i++)
		write(ans[i]),putchar('\n');
	return 0;
}
Ejemplo n.º 29
0
int remove(unsigned int a){

    if(!ma.empty()){
	if(ma.back()==a){
	    ma.pop_back();
	}
    }
    if(!mi.empty()){
	if(mi.back()==a){
	    mi.pop_back();
	}
    }

    return 0;
}
Ejemplo n.º 30
0
int main (int argc, char const *argv[]) {
    while ( scanf("%d", &N) != EOF && N ) {
        while ( scanf("%d", &a) != EOF && a ) {
            S.clear();
            v.clear();
            S.pb(a);
            for (int i = 1; i < N; i += 1) {
                scanf("%d", &a);
                S.pb(a);
            }
            cnt = 0;
            for (int i = 1; i <= N; i += 1) {
                v.push_back(i);
                while ( !v.empty() && v.back() == S[cnt] ) {
                    v.pop_back();
                    cnt++;
                }
            }
            if (v.empty()) {
                printf("Yes\n");
            } else    printf("No\n");
        }
        printf("\n");
    }

    return 0;
}