zoukankan      html  css  js  c++  java
  • HDOJ 2433 Counter Strike 逆序对 线段树

    Problem Description

    Anti-terrorism is becoming more and more serious nowadays. The country now has n soldiers,and every solider has a score.

    We want to choose some soldiers to fulfill an urgent task. The soldiers chosen must be adjacent to each other in order to make sure that they can cooperate well. And all the soldiers chosen must have an average score greater than a.

    Now, please calculate how many ways can the chief of staff choose the soldiers.
     
    Input
    The first line consists of a single integer t, indicating number of test cases.

    For each test case, the first line gives n, the number of soldiers, and a, the minimum possible average score(n<=100000,a<=10000). The second line gives n integers, corresponding to the soldiers' scores in order. All the scores are no greater than 10000.
     
    Output
    An integer n, number of ways to choose the soldiers.
     
    Sample Input
    2
    5 3
    1 3 7 2 4
    1 1000
    9999
     
    Sample Output
    10 1
     
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 
     7 struct date
     8 {
     9       int lt,rt,Max,ans;
    10 }node[300005];
    11 int arr[100005],cnt[100005],val,N,A;
    12 
    13 int build_tree( int lt,int rt,int t )
    14 {               
    15        node[t].lt  = lt;
    16        node[t].rt  = rt;
    17        node[t].ans = 0;
    18        if( lt == rt )
    19             return node[t].Max = cnt[lt];
    20        int mid = ( lt + rt )>>1;
    21             return node[t].Max = max( build_tree( lt,mid,t<<1 ),build_tree( mid+1,rt,t<<1|1 ) );
    22 }
    23        
    24 int inset_tree( int t,int wi )
    25 {
    26     val += node[t].ans;
    27     if( node[t].lt == node[t].rt )
    28     {
    29        if( node[t].Max > 0 )val++; 
    30        return 0;
    31     }
    32     if( node[t<<1].Max >= wi )
    33     {
    34         inset_tree( t<<1,wi );  
    35         node[t<<1|1].ans++;
    36     }
    37     else inset_tree( t<<1|1,wi );
    38                 return 0;
    39 }
    40 
    41 int main( )
    42 {
    43     int i,T;
    44     long long res;
    45     scanf("%d",&T); 
    46     while( T-- )
    47     {
    48         res = 0;
    49         scanf("%d%d",&N,&A);
    50         for( i = 1; i <= N; i++ )
    51         {
    52             scanf("%d",&arr[i]);
    53             arr[i] = arr[i-1] + arr[i] - A;
    54             cnt[i] = arr[i];
    55         }    
    56         sort( &cnt[1], &cnt[1] + N );
    57         int t = unique( &cnt[1],&cnt[1] + N ) - &cnt[1];
    58         build_tree( 1,t,1 );
    59         for( i = 1; i <= N; i++ )
    60         {
    61             val = 0;
    62             inset_tree( 1,arr[i] );
    63             res += val;
    64         }
    65         printf("%I64d\n",res);
    66     }
    67     //system("pause");
    68     return 0;
    69 }
  • 相关阅读:
    JS和PYTHON中数据类型比较
    http状态码
    ffmpeg architecture(上)
    降低数值精度以提高深度学习性能
    IaaS、PaaS 和 SaaS:云服务模型概述
    英特尔Intel® Arria® 10 FPGA加速器设计
    基于至强® 平台的内存数据库解决方案
    MLPerf结果证实至强® 可有效助力深度学习训练
    如何从数据角度为人工智能部署做好数据准备
    英特尔内存革新助平安云 Redis 云服务降本增效
  • 原文地址:https://www.cnblogs.com/wulangzhou/p/2955884.html
Copyright © 2011-2022 走看看