空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
输入描述:
第一行有两个整数n, m(1 <= n, m <= 100000)代表数列的长度和询问的次数
第二行n个数字,对于第i个数字a[i],(0<=a[i]<=100000)。
接下来m行,每一行有三个整数f, x, y。第一个整数f是1或者是2,代表操作类型,如果是1,接下来两个数x,y代表第x的位置上加y,如果是2,则求x到y的和,保证数据合法。
输出描述:
输出每次求和的结果并换行
输入
10 2 1 2 3 4 5 6 7 8 9 10 1 1 9 2 1 10
输出
64
1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 using namespace std; 5 int a[100005]; 6 long long s[100005]; 7 int x[100005]; 8 int y[100005]; 9 int z[100005]; 10 int main() 11 { 12 int n, q; 13 scanf("%d %d", &n, &q); 14 int i; 15 s[0] = 0; 16 for (i = 1; i <= n; i++) 17 { 18 scanf("%d", &a[i]); 19 s[i] = s[i - 1] + a[i]; 20 } 21 int k = 1; 22 for (i = 1; i <= q; i++) 23 { 24 int e, u, v; 25 scanf("%d %d %d", &e, &u, &v); 26 int j; 27 long long ss = 0; 28 if (e == 1)//如果是第一种情况,存下来 29 { 30 x[k] = e; 31 y[k] = u; 32 z[k++] = v; 33 } 34 if (e==2)//如果是第二种情况 35 { 36 for (j = 1; j <= k-1; j++)//遍历第一种情况 37 { 38 if (y[j]<=v&&y[j]>=u)//如果要加的数在u和v之间 39 { 40 ss += z[j];//总和+上 41 } 42 } 43 ss += s[v] - s[u-1]; 44 cout << ss << endl; 45 } 46 47 } 48 return 0; 49 }
链接:https://www.nowcoder.com/acm/contest/77/B
来源:牛客网
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
输入描述:
第一行有两个整数n, m(1 <= n, m <= 100000)代表数列的长度和询问的次数
第二行n个数字,对于第i个数字a[i],(0<=a[i]<=100000)。
接下来m行,每一行有三个整数f, x, y。第一个整数f是1或者是2,代表操作类型,如果是1,接下来两个数x,y代表第x的位置上加y,如果是2,则求x到y的和,保证数据合法。
输出描述:
输出每次求和的结果并换行
输入
10 2 1 2 3 4 5 6 7 8 9 10 1 1 9 2 1 10
输出
64
1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 using namespace std; 5 int a[100005]; 6 long long s[100005]; 7 int x[100005]; 8 int y[100005]; 9 int z[100005]; 10 int main() 11 { 12 int n, q; 13 scanf("%d %d", &n, &q); 14 int i; 15 s[0] = 0; 16 for (i = 1; i <= n; i++) 17 { 18 scanf("%d", &a[i]); 19 s[i] = s[i - 1] + a[i]; 20 } 21 int k = 1; 22 for (i = 1; i <= q; i++) 23 { 24 int e, u, v; 25 scanf("%d %d %d", &e, &u, &v); 26 int j; 27 long long ss = 0; 28 if (e == 1)//如果是第一种情况,存下来 29 { 30 x[k] = e; 31 y[k] = u; 32 z[k++] = v; 33 } 34 if (e==2)//如果是第二种情况 35 { 36 for (j = 1; j <= k-1; j++)//遍历第一种情况 37 { 38 if (y[j]<=v&&y[j]>=u)//如果要加的数在u和v之间 39 { 40 ss += z[j];//总和+上 41 } 42 } 43 ss += s[v] - s[u-1]; 44 cout << ss << endl; 45 } 46 47 } 48 return 0; 49 }