[Kuangbin飛ぶためにあなたを取る]テーマの7セグメントツリー

 
ライバル国C国の継続的な軍事演習、この時間は、国のスパイチーフCデレクと彼の男性は忙しいのTidyまで始めました。Nエンジニアリングキャンプのラインに沿って配置された国の海岸線は、デレクとTidyのタスクは、これらのエンジニアキャンプの活動を監視することです。高度な監視ツールのいくつかの種類なので、各陣営のCクリスタルクリアな把握米国でのエンジニアの数の結果として、各陣営における技術者の数は、変更を発生する可能性がある職員の数を増減することがありますが、それらはCを免れることはできません国を監視します。
「Tidyの、すぐに10の陣営の合計の多くの人々に最初の3つのキャンプを報告:デレクTidyのレポートにどのように多くの人の合計を連続エンジニアリングキャンプの一定期間を維持するように、デレクは尋ねたなど、まさに練習敵の戦術を研究するためにCIA !「Tidyのは、すぐにこの項及び報告書の合計数を計算するために開始されます。しかし、デレクはTidyの速度を計算するために敵のキャンプの数は頻繁に変更し、デレクは、各セグメントは、Tidyのはキャンプ、すぐに枯渇の数に行かなければならなかったので、毎回違う尋ねますます不満:Tidyの思想「!死んだ脂肪の少年あなた、とても遅いと考え、私はあなたを解雇」:「あなたは数学を自分で行う、本当に私はあなたがあまりにも私を解雇たい疲れる仕事です! 「絶望では、Tidyのは、ウインドブレーカー、ウインドブレーカーを支援するために、コンピュータの専門家を呼び出すためにと言いました:」!死んだ脂肪少年、あなたは通常、マルチポイントACMタイトルと呼ばれ、マルチ小数点演算ブックを参照してくださいか、今の苦い実を味わった「Tidyのは、言いました:」私は...ミスを認め「が、ウインドブレーカーは、電話を切りました。Tidyの非常に動揺し、彼は本当に、インテリジェントな読者をクラッシュをカウントしますので、あなたは彼が仕事を終える支援するプログラムを書くことができますか?あなたのプログラムの効率が十分に高くない場合でも、Tidyのはまだデレクさん叱られます。

入力データの最初の行の整数T、Tセットが発現しました。
各正の整数N(N <= 50000)の最初の行のデータ、Nは、敵キャンプエンジニア、Nと次の正の整数を表し、iはi番目のAI開始エンジニアリングキャンプを表す正の整数をaiを有するあります個人(1 <= AI <= 50 )。
:次に、コマンドを有する各列は、コマンドは、4つの形式があり
(1)、追加のijは、iは、jは正の整数でキャンプ増加個人jのi番目(jは30以下である)である
、(2)サブIJをiとjそれは、正の整数である(jは30を超えていない)は、i番目のキャンプは、Jの個人を減らす表し;
の(3)クエリIJ、i、jは正の整数であり、私は= J <、j番目のキャンプにi番目の総数を求めるために提示します。
(4)最後は終わり、データの各セットに現れる最後のコマンドを示し;
40,000コマンド各データまでの
データのi番目のグループの出力、最初の出力「私はケース:」と入力して、
各クエリのクエリ出力のための問い合わせセグメントを示す整数であり、キャリッジリターン、の合計数は、この数がINT内に留まります。
サンプル入力
1 
10 
1 2 3 4 5 6 7 8 9 10 
クエリ1 3 
3 6は、追加
クエリ2~7 
のSub 10 2 
6 3追加
クエリ3 10 
終了
サンプル出力
ケース1:
6 
33 
59

#define TLEのstd ::イオス:: sync_with_stdio(偽); cin.tie(NULL)。cout.tie(NULL)。cout.precision(10)。
#defineは << 1つの今LC
 の#define 1 |今RC << 1つ
 の#define今LS << 1、L、中間
 の#define R 1、中間+ 1、|今RS << 1
 の#define半分NO [今]。 1 +((NO [今] .R-NO [今] .L)>> 1)
 CONST  INT MXN = 50000 + 5 構造体ノード
{ 
    int型のL、R、ヴァル、怠惰。
} NO [MXN << 2 ]。
ボイド押し上げ(INT今){NO [今] .val = NO [LC] .val + NO [RC] .val。返す};
 無効(ビルドint型ていない今、int型の L、INT R)
{ 
    NO [今] .L = L; NO [今] .R = R。
    もし(L == R)
    { 
        CIN >> NO [今] .val。
        // coutの<<なし[今] .val <<」「; 
        返します
    } 
    INT半ば= L +((RL)>> 1 )。
    (LC、L、ミッド)を構築。
    ビルド(RC、ミッド + 1 、R); 
    腕立て伏せ(今)。
} 
int型の照会(int型、今int型、LをINT R)
{ 
    場合(NO [今] .L> = L && R> = NO [今] .R)
         戻りNO [今] .val;ていません
    INT半ば= NO [今] .L +((NO [今] .R-NO [今] .L)>> 1)、CNT = 0 もし(L <= MID)
        CNT + = クエリ(LC、L、R)。
    もし(R> MID)
        CNT + = クエリ(RC、L、R)。
    リターンCNT; 
} 
ボイドアップデータ(int型、今int型、POSをINT キー)
{ 
    場合(== NO [今] .L [今] .R NO)
    { 
        NO [今] .val + = キー。
        返します
    } 
    int型ミッド= 半分。
    もし(POS <= MID)
        アップデータ(LC、POS、キー)。
    他の
        アップデータ(RC、POS、キー)。
    腕立て伏せ(今)。
} 
int型のmain()
{ 
    TLE。
    int型、T、N、L、R。
    文字列strの。
    cinを >> トン。
    int型 iは= 1 ; I <= T iが++ 
    { 
        COUT << " ケース" << I << " " << ENDL。
        CIN>> N; 
        ビルド(11 、N)
        一方、(CIN >> STR &&(STR [ 0!] = ' E ' ))
        { 
            場合(STR [ 0 ] == ' Q ' 
            { 
                CIN >> L >> R。
                COUT <<クエリ(1、L、R)<< ENDL。
            } 
            そう であれば(STR [ 0 ] == ' A ' 
            { 
                CIN >> L>
                アップデータ(1 、L、R)。
            } 

            そう であれば(STR [ 0 ] == ' S ' 
            { 
                CIN >> L >> R。
                アップデータ(1、L、 - 1 * R)。
            } 
        } 
    } 
    戻り 0 
}

 

B - 私はそれを嫌います

多くの学校のより人気の習慣。先生は本当に最高のスコアの中からあるので、そのためにとてもので、お願いしたいです。
これは、多くの学生はうんざりしていることができます。

あなたがそれを好きかどうか、今あなたがする必要があるかどうかは、それが尋ねた先生をシミュレートするプログラムを書くために、教師の要件に準拠している、です。もちろん、教師は時々 、特定の生徒の成果を更新する必要があります。

Input本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。
学生ID编号分别从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。
当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
Output对于每一次询问操作,在一行里面输出最高成绩。Sample Input
5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5
Sample Output
5
6
5
9


        
 
Hint
Huge input,the C function scanf() will work better than cin
        
 
#define TLE std::ios::sync_with_stdio(false);   cin.tie(NULL);   cout.tie(NULL);   cout.precision(10);
#define lc now<<1
#define rc now<<1|1
#define ls now<<1,l,mid
#define rs now<<1|1,mid+1,r
#define half no[now].l+((no[now].r-no[now].l)>>1)
const int mxn = 200000+5; int mx;
struct node
{
    int l,r,val,lazy;
}no[mxn<<2];
void pushup(int now) { no[now].val = max( no[lc].val,no[rc].val); return ;}
void build(int now , int l,int r)
{
    no[now].l = l;no[now].r = r;
    if(l==r)
    {
        cin>>no[now].val;
        return ;
    }
    int mid = l+((r-l)>>1);
    build(lc,l,mid);
    build(rc,mid+1,r);
    pushup(now);
}
void query(int now,int l,int r)
{
    if(no[now].l>=l && r>=no[now].r)
        {mx = max(mx,no[now].val);return ;}
    int mid = no[now].l+((no[now].r-no[now].l)>>1);
    if(l<=mid)
        query(lc,l,r);
    if(r>mid)
        query(rc,l,r);
}
void updata(int now,int pos,int key)
{
    if(no[now].l==no[now].r&&no[now].l==pos)
    {
        no[now].val = key;
        return ;
    }
    int mid = half;
    if(pos<=mid)
        updata(lc,pos,key);
    else
        updata(rc,pos,key);
    pushup(now);
}
int main()
{
    TLE;
    int t,n,l,r;
    while(cin>>n>>t)
    {
        build(1,1,n);
        while(t--)
        {
            mx = -1;
            char ch;
            cin>>ch>>l>>r;
            if(ch=='Q')
            {
                query(1,l,r);
                cout<<mx<<endl;
            }
            else
                updata(1,l,r);
        }
        
    }
    return 0;
}

 

K - Atlantis

There are several ancient Greek texts that contain descriptions of the fabled island Atlantis. Some of these texts even include maps of parts of the island. But unfortunately, these maps describe different regions of Atlantis. Your friend Bill has to know the total area for which maps exist. You (unwisely) volunteered to write a program that calculates this quantity.

InputThe input file consists of several test cases. Each test case starts with a line containing a single integer n (1<=n<=100) of available maps. The n following lines describe one map each. Each of these lines contains four numbers x1;y1;x2;y2 (0<=x1<x2<=100000;0<=y1<y2<=100000), not necessarily integers. The values (x1; y1) and (x2;y2) are the coordinates of the top-left resp. bottom-right corner of the mapped area.

The input file is terminated by a line containing a single 0. Don’t process it.OutputFor each test case, your program should output one section. The first line of each section must be “Test case #k”, where k is the number of the test case (starting with 1). The second one must be “Total explored area: a”, where a is the total explored area (i.e. the area of the union of all rectangles in this test case), printed exact to two digits to the right of the decimal point.

Output a blank line after each test case.
Sample Input
2
10 10 20 20
15 15 25 25.5
0
Sample Output
Test case #1
Total explored area: 180.00 


明天更新吧,到了睡觉时间了

おすすめ

転載: www.cnblogs.com/Shallow-dream/p/11741472.html