コード例 #1
0
ファイル: Ans.cpp プロジェクト: niyuzheno1/CODES
int main(int argc, char *argv[])
{
    setIO("tower");
    n = gi;
    for(int i = 1;i<=n;++i)
     a[i] = gi;
    for(int i = 1;i<=n+1;++i)
     a[i] = a[i-1]+a[i];
    q.push_front(n+1);
    for(int i = n;i>=0;--i)
    {
     while(!q.empty())
     {
      int x = q.front();q.pof();
      if(q.empty()){
       q.pf(x);
       break;
      }else{
       int y = q.front();q.pof();
       if(a[x] >= a[y] && a[i]<=a[y]-f[y])
        q.pf(y);
       else
       { 
       q.pf(y),q.pf(x);
       break;
       }
      }
     }
     f[i] = a[q.front()]-a[i];
     h[i] = h[q.front()]+1;
     ans = max(ans,h[i]);
     while(!q.empty()){
      int x = q.back();q.pob();
      if(a[x]-f[x] < a[i]-f[i] && a[x]>=a[i] )
       continue;
      else{
       q.pb(x);
       break;
      }
     }
     q.pb(i);
    }
    printf("%d\n",ans-1);
    closeIO();
    return EXIT_SUCCESS;
}
コード例 #2
0
ファイル: C.cpp プロジェクト: habibruetian12/LightOj
int main()
{
	freopen("C.INP","r",stdin);
	freopen("C.OUT","w",stdout);
	int tcs;
	scanf(" %d ",&tcs);
	for(int t = 1 ; t <= tcs ; t++)
	{
		dq.clear();
		printf("Case %d:\n",t);
		int n;
		scanf(" %d ",&n);
		int a;
		scanf(" %d ",&a);
		dq.pb(a);
		puts("0");
		for(int i = 1 ; i < n ; i++)
		{
			scanf(" %d ",&a);
			if(a >= dq.back())
			{
				printf("%d\n",dq.size());
				dq.pb(a);
			}
			else if(a <= dq.front())
			{
				int cnt = 0;
				while(dq[cnt++] == a);
				printf("%d\n",cnt-1);
				dq.pf(a);
			}
			else
			{
				int pos = bSearch(a);
				if(dq[pos] == a)
				{
					while(dq[pos] == a)
						pos++;
				}
				else if(dq[pos] < a)
					pos++;
				printf("%d\n",pos);
				dq.insert(dq.begin()+pos,a);
			}
			//for(int i = 0 ; i < dq.size() ; i++)
//				printf("%d ",dq[i]);
//			printf("\n");
		}
		
	}
	return 0;
}