动态规划,而已! CodeForces 433B - Kuriyama Mirai's Stones

简介:

Kuriyama Mirai has killed many monsters and got many (namely n) stones. She numbers the stones from 1 to n. The cost of the i-th stone is vi. Kuriyama Mirai wants to know something about these stones so she will ask you two kinds of questions:

  1. She will tell you two numbers, l and r (1 ≤ l ≤ r ≤ n), and you should tell her .
  2. Let ui be the cost of the i-th cheapest stone (the cost that will be on the i-th place if we arrange all the stone costs in non-decreasing order). This time she will tell you two numbers, l and r (1 ≤ l ≤ r ≤ n), and you should tell her .

For every question you should give the correct answer, or Kuriyama Mirai will say "fuyukai desu" and then become unhappy.

Input

The first line contains an integer n (1 ≤ n ≤ 105). The second line contains n integers: v1, v2, ..., vn (1 ≤ vi ≤ 109) — costs of the stones.

The third line contains an integer m (1 ≤ m ≤ 105) — the number of Kuriyama Mirai's questions. Then follow m lines, each line contains three integers typel and r (1 ≤ l ≤ r ≤ n; 1 ≤ type ≤ 2), describing a question. If type equal to 1, then you should output the answer for the first question, else you should output the answer for the second one.

Output

Print m lines. Each line must contain an integer — the answer to Kuriyama Mirai's question. Print the answers to the questions in the order of input.

Sample test(s)
input
6
6 4 2 7 2 7
3
2 3 6
1 3 4
1 1 6
output
24
9
28
input
4
5 5 2 3
10
1 2 4
2 1 4
1 1 1
2 1 4
2 1 2
1 1 1
1 3 3
1 1 3
1 4 4
1 2 2
output
10
15
5
15
5
5
2
12
3
5
Note

Please note that the answers to the questions may overflow 32-bit integer type.

题目说给一串数字,然后给指令1或2。输入l。r求第l到r的和。讲具体点:先输入一个n,代表有多少个元素,然后输入n个元素,然后输入一个q代表有多少次指令,1的指令就是直接将a[l]一直加加到a[r],然后输出和,2的指令是先将a[]排序,sort即可了。然后和上面一样求和。思路非常easy,哈哈。看到这种B题非常开心吧,普通写法for循环一个个加的话。写完你就发现TLE了。并且TLE的非常开心啊!!!

!!

都说了这是动态规划啊。!!

!!!

咱们这样存储:每一个元素存储的是前i个元素的和。这样a[l]一直到a[r]的表达式就为a[r]-a[l-1];
好好理解下,对吧?。
动态规划就是拿空间换时间的算法,在执行过程中会产生大量中间数据进行抉择。每个状态始终影响下一步的状态!!!

嗯。贴代码时间:
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 100006
__int64 sum;
__int64 pp[maxn]={0},p[maxn]={0},liu[maxn],xp[maxn];
int main()
{
    int i,j,k;
    int t,n,m;
    int l,r;
    while(scanf("%d",&n)!=EOF)
    {
        p[0]=0;
        for(i=1;i<=n;i++)
        {
            scanf("%I64d",&liu[i]);
            xp[i]=liu[i];
            p[i]=p[i-1]+liu[i];
        }
        xp[0]=0;
        sort(xp,xp+n+1);
        for(i=1;i<=n;i++)
            pp[i]=pp[i-1]+xp[i];
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&m);
            if(m==1)
            {
                scanf("%d%d",&l,&r);
                sum=p[r]-p[l-1];
                printf("%I64d\n",sum);
            }
            else if(m==2)
            {
                scanf("%d%d",&l,&r);
                sum=pp[r]-pp[l-1];
                printf("%I64d\n",sum);
            }
        }
    }
    return 0;
}
看出bug就讲吧,谢谢;

版权声明:本文博客原创文章,博客,未经同意,不得转载。








本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4675296.html,如需转载请自行联系原作者


相关文章
|
27天前
|
算法
AcWing 1262. 鱼塘钓鱼(每日一题)
AcWing 1262. 鱼塘钓鱼(每日一题)
|
6月前
力扣1222.可以攻击国王的王后
力扣1222.可以攻击国王的王后
leetcode 1222. 可以攻击国王的皇后(每日一题)
leetcode 1222. 可以攻击国王的皇后(每日一题)
75 0
|
算法 C++
蓝桥杯(聪明的猴子)克鲁斯卡尔算法最小生成树
蓝桥杯(聪明的猴子)克鲁斯卡尔算法最小生成树
102 0
|
算法
算法简单题,吾辈重拳出击 - 动态规划之爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
|
C++
【力扣·每日一题】913. 猫和老鼠(C++ 记忆化搜索 博弈)
【力扣·每日一题】913. 猫和老鼠(C++ 记忆化搜索 博弈)
213 0
【力扣·每日一题】913. 猫和老鼠(C++ 记忆化搜索 博弈)
|
人工智能
codeforces455——A. Boredom(线性DP)
codeforces455——A. Boredom(线性DP)
123 0
codeforces455——A. Boredom(线性DP)
|
算法 Java C++
算法系统学习-在吗?百钱买百鸡呗?(蛮力法)
该系列是基于有一定语言基础(C,C++,Java等等)和基本的数据结构基础进行的算法学习专栏,如果觉得有点吃力 😥 ,建议先了解前提知识再学习喔!本个专栏会将用更容易理解的表达去学习算法,如果在一些表述上存在问题还请各位多多指点
157 0
|
机器学习/深度学习 算法
算法竞赛题解:旗鼓相当的对手
算法竞赛题解:旗鼓相当的对手
353 0