P1198 [JSOI2008]最大數

來源:互聯網
上載者:User

標籤:查詢   size   char   max   poi   UI   int   fine   read   

題目描述

現在請求你維護一個數列,要求提供以下兩種操作:

1、 查詢操作。

文法:Q L

功能:查詢當前數列中末尾L個數中的最大的數,並輸出這個數的值。

限制:L不超過當前數列的長度。

2、 插入操作。

文法:A n

功能:將n加上t,其中t是最近一次查詢操作的答案(如果還未執行過查詢操作,則t=0),並將所得結果對一個固定的常數D模數,將所得答案插入到數列的末尾。

限制:n是整數(可能為負數)並且在長整範圍內。

注意:初始時數列是空的,沒有一個數。

輸入輸出格式 輸入格式:

第一行兩個整數,M和D,其中M表示操作的個數(M <= 200,000),D如上文中所述,滿足(0<D<2,000,000,000)

接下來的M行,每行一個字串,描述一個具體的操作。文法如上文所述。

輸出格式:

對於每一個查詢操作,你應該按照順序依次輸出結果,每個結果佔一行。

輸入輸出範例 輸入範例#1:
5 100A 96Q 1A 97Q 1Q 2
輸出範例#1:
969396
說明

[JSOI2008]

 

思路的話。

首先衝著最大值

建一顆空樹

然後加入就是單點修改

查詢就是插後面的m位。。。。

但是這題在洛穀上AC

在COGS上爆零

-.-

還有就是不能開讀入最佳化

 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #define lglg long long int 6 using namespace std; 7 const int n=200001; 8 lglg mod,m; 9 struct node10 {11     lglg l,r,w;12 }tree[n*4];13 lglg num=1;14 lglg last=0;15 lglg ans=-1;16 void updata(int k)17 {18     tree[k].w=max(tree[k*2].w,tree[k*2+1].w);19 }20 void build(int ll,int rr,int k)21 {22     tree[k].l=ll;tree[k].r=rr;23     if(tree[k].l==tree[k].r)24     {25         tree[k].w=0;26         return ;27     }28     int m=(ll+rr)/2;29     build(ll,m,k*2);30     build(m+1,rr,k*2+1);31     updata(k);32 }33 int read(lglg &x)34 {35     int flag=0;36     char c=getchar();x=0;37     if(c==‘-‘)flag=1;38     while(c<‘0‘||c>‘9‘)c=getchar();39     while(c>=‘0‘&&c<=‘9‘)x=x*10+c-48,c=getchar();40     return flag==1?x=-x:x;    41 }42 void point_add(int where,int p,int k)43 {44     if(tree[k].l==tree[k].r)45     {46         tree[k].w=p;47         return ;48     }49     int m=(tree[k].l+tree[k].r)/2;50     if(where<=m)51         point_add(where,p,k*2);52     else53         point_add(where,p,k*2+1);54     updata(k);    55 }56 void interval_ask(int ll,int rr,int k)57 {58     if(ll<=tree[k].l&&rr>=tree[k].r)59     {60         if(ans<tree[k].w)ans=tree[k].w;61         return ;62     }63     int m=(tree[k].l+tree[k].r)/2;64     if(ll<=m)65         interval_ask(ll,rr,k*2);66     if(rr>=m+1)67         interval_ask(ll,rr,k*2+1);68 }69 int main()70 {71     //read(m);read(mod);72     cin>>m>>mod;73     build(1,n,1);74     for(int i=1;i<=m;i++)75     {76         char c;77         cin>>c;78         if(c==‘A‘)79         {80             lglg p;81             //read(p);82             cin>>p;83             p=(p+last)%mod;84             point_add(num++,p,1);85         }86         else87         {88             lglg p;89             ans=-1;90             //read(p);91             cin>>p;92             interval_ask(num-p,num-1,1);93             last=ans%mod;94             printf("%lld\n",ans);95         }96     }97     return 0;98 }

 

 

P1198 [JSOI2008]最大數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.