B. Kuriyama Mirai's Stones
2016-04-25 18:12
323 查看
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
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:
She will tell you two numbers, l and r (1 ≤ l ≤ r ≤ n),
and you should tell her
.
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 type, l 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.
Examples
input
output
input
output
Note
Please note that the answers to the questions may overflow 32-bit integer type.
解题说明:此题是一道模拟题,按照题目要求输出给定区间的数字之和,或者对数列进行排序,输出给定区间之和。
#include<cstdio>
#include <cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include <map>
using namespace std;
int main()
{
int n,q,t,l,r,i;
long long int a[100010],b[100010],c[100010];
cin>>n;
for( i=0; i<n; i++)
{
cin>>a[i];
b[i+1] = a[i] + b[i];
}
sort(a,a+n);
for( i=0; i<n; i++)
{
c[i+1] = a[i] + c[i];
}
cin>>q;
while(q--)
{
cin>>t>>l>>r;
if(t==1)
{
cout<<b[r]-b[l-1]<<endl;
}
else
{
cout<<c[r]-c[l-1]<<endl;
}
}
return 0;
}
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
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:
She will tell you two numbers, l and r (1 ≤ l ≤ r ≤ n),
and you should tell her
.
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 type, l 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.
Examples
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.
解题说明:此题是一道模拟题,按照题目要求输出给定区间的数字之和,或者对数列进行排序,输出给定区间之和。
#include<cstdio>
#include <cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include <map>
using namespace std;
int main()
{
int n,q,t,l,r,i;
long long int a[100010],b[100010],c[100010];
cin>>n;
for( i=0; i<n; i++)
{
cin>>a[i];
b[i+1] = a[i] + b[i];
}
sort(a,a+n);
for( i=0; i<n; i++)
{
c[i+1] = a[i] + c[i];
}
cin>>q;
while(q--)
{
cin>>t>>l>>r;
if(t==1)
{
cout<<b[r]-b[l-1]<<endl;
}
else
{
cout<<c[r]-c[l-1]<<endl;
}
}
return 0;
}
相关文章推荐
- POJ2010-Moo University - Financial Aid
- 设计模式之---责任链模式(Chain of Responsibility)
- 异常信息ASM ClassReader failed to parse class file的问题解决
- SLF4J: Class path contains multiple SLF4J bindings.
- HDU 1848 Fibonacci again and again Nim博弈变形
- failed: Too many links 解决
- 1215 - Cannot add foreign key constraint
- POJ 1273 —— Drainage Ditches 入门题
- AIR开发手机 相关文档
- RAID总结
- <OJ_Sicily>1_D closet pair最近邻点对
- Flume-ng TaildirSource 填坑
- HDU 1789 Doing Homework again
- ssdtrain demo
- handler.obtainMessage()与new Message的区别
- CPaintDC、CClientDC、CWindowDC和CMetaFileDC类的主要特点及区别
- 用RAII技术管理资源及其泛型实现
- standby报错:PING[ARC2]: Heartbeat failed to connect to standby 'orcl'. Error is 16009.
- sleep()与wait()有什么区别
- DG - physical standby failover切换过程