1687: 陣列操作
time limit: 1 sec memory limit: 128 mb
[submit][status][web board]
description
給你乙個初始的長度為n的陣列。(1<=n<=105)
有兩個操作:
op1(l, r):給兩個整數l和r(1<=l<=r<=當前陣列長度)。你需要計算陣列從l到r的所有元素的和。
op2(x):給你乙個整數x(|x| <= 109),你需要將x新增到陣列的頭部。原先的第乙個元素變成第二個元素,第二個元素變成第三個,以此類推。並且陣列的長度增加1.
input
多組測試資料,處理到檔案結尾。
每組測試資料,首先給出乙個n(1 <= n <= 105), 表示初始的陣列的元素個數。
第二行n個數字表示初始陣列的n個元素,a1 a2 … an.(|ai| <= 109)。
第三行有乙個q,表示有q個操作。1 <= q <= 105
接下來q行,每行的第乙個數表示操作的型別,只可能是1或者2,形式如下:
1 l r:操作1,求l到r的元素的和。
2 x:操作2,將x新增到陣列頭部。
output
對於每組測試資料,首先輸出"case x:",表示當前是第x組測試資料。
然後對於每個操作1輸出對應的答案,對於操作2不需要任何輸出。
sample input
101 2 3 4 5 6 7 8 9 10
41 1 10
1 1 1
1 10 10
1 2 7
56 7 8 9 10
92 5
2 41 2 7
2 32 2
2 11 1 10
1 1 1
1 10 10
sample output
case 1:551
1027
case 2:
4555110
hint
source
ac**~:
#include #include long long a[200005],b[200005];
int main()
for(int j = 1; j <= n; j++)//最後乙個數到倒數第j個數的和
int q,num,t;
scanf("%d",&q);
printf("case %d:\n",++c);
while(q--)
else}}
return 0;
}
(用動態陣列+數狀陣列)時間超限**:
//時間超限,樹狀陣列中整合陣列c更新慢(每次加乙個數要更新,耗時啊!!)
#include #include using namespace std;
vectora(200005),c(200005);
int n;
int lowbit(int x)
long long sum(int y)
void update(int y,int k)
int main()
scanf("%d",&q);
printf("case %d:\n",++c);
while(q--)
else}}
}return 0;
}
程式設計的非常規總結
1 將問題簡化,從比較簡單的情況開始分析,比如1個元素情況,2個元素情況,3個元素情況,不斷增加,尋找規律,這樣有利於發現規律,從而解決問題,並且也有利於處理邊界情況。比如程式設計之美1.11 又如送貨站選址問題 1的個數問題等都可一通過逐漸的分析加以解決 2 從比較簡單的例子,模擬程式執行過程,比...
Ubuntu非常規命令tips
最後利用 update rc.d 命令更新系統啟動項 如 sudo update rc.d disable transparent hugepages defaults p.s.disable transparent hugepages在文末 update alternatives display ...
非常規應用 bbed介紹
bbed安裝 cd oracle home rdbms lib make f ins rdbms.mk oracle home rdbms lib bbed 也可通過以下命令將bbed生成到 oracle home bin目錄 make f ins rdbms.mk bbed oracle home...