code forces 276C Little Girl and Maximum Sum (线段树/技巧)
来源:互联网 发布:苹果电脑 音乐软件 编辑:程序博客网 时间:2024/06/05 16:50
The little girl loves the problems on array queries very much.
One day she came across a rather well-known problem: you've got an array of n elements (the elements of the array are indexed starting from 1); also, there are q queries, each one is defined by a pair of integers li, ri (1 ≤ li ≤ ri ≤ n). You need to find for each query the sum of elements of the array with indexes from li to ri, inclusive.
The little girl found the problem rather boring. She decided to reorder the array elements before replying to the queries in a way that makes the sum of query replies maximum possible. Your task is to find the value of this maximum sum.
The first line contains two space-separated integers n (1 ≤ n ≤ 2·105) and q (1 ≤ q ≤ 2·105) — the number of elements in the array and the number of queries, correspondingly.
The next line contains n space-separated integers ai (1 ≤ ai ≤ 2·105) — the array elements.
Each of the following q lines contains two space-separated integers li and ri (1 ≤ li ≤ ri ≤ n) — the i-th query.
In a single line print a single integer — the maximum sum of query replies after the array elements are reordered.
Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.
3 35 3 21 22 31 3
25
5 35 2 4 1 31 52 32 3
33
【题解】
刚开始用线段树做的,因为自己比较水,超时了,后来思考良久,发现了新大陆,没那么复杂,我们只需要把各点的查询频率排序,然后再把数排序,对应值相乘求和就好了。
【AC代码】
#include<cstdio>#include<algorithm>#include<cstdio>#include<math.h>#include<string.h>#include<iostream>using namespace std;typedef __int64 ll;const int N = 2e5+10;int a[N],c[N];int m,n;ll s;int main(){ while(~scanf("%d%d",&m,&n)) { for(int i=1;i<=m;++i) scanf("%d",&a[i]); memset(c,0,sizeof c); while(n--) { int x,y; scanf("%d%d",&x,&y); c[x]++; c[y+1]--; } for(int i=1;i<=m;++i) c[i]+=c[i-1]; sort(a+1,a+m+1); sort(c+1,c+m+1); s=0; for(int i=1;i<=m;++i) s+=ll(c[i])*ll(a[i]); printf("%I64d\n",s); } return 0;}
- code forces 276C Little Girl and Maximum Sum (线段树/技巧)
- Codeforces 276C Little Girl and Maximum Sum 线段树区间累加
- Codeforces 276C Little Girl and Maximum Sum(线段树的区间更新)
- C. Little Girl and Maximum Sum
- CodeForces 276C Little Girl and Maximum Sum
- Codeforces 276C Little Girl and Maximum Sum
- codeforces 276 C. Little Girl and Maximum Sum
- Codeforces 276C Little Girl and Maximum Sum【贪心】
- Little Girl and Maximum Sum
- Code Forces 276 B. Little Girl and Game 贪心
- CodeForces - 276C Little Girl and Maximum Sum (扫描线)
- CF276C Little Girl and Maximum Sum(贪心+差分)
- [CF 276C]Little Girl and Maximum Sum[差分数列]
- Codeforces Round #169 (Div. 2)---C. Little Girl and Maximum Sum(简单贪心)
- 【Code Forces】221D - Little Elephant and Array(线段树,思维做法)
- Codeforces 276D. Little Girl and Maximum XOR(模拟)
- N - Little Girl and Maximum Sum——贪心
- codeforces 276D Little Girl and Maximum XOR(区间最大异或值--技巧)【模板】
- Java学习总论
- 怎样造一个有向无环图
- leetcode算法题easy心得(一)Linked List Cycle
- 5.理解shell
- React Native学习
- code forces 276C Little Girl and Maximum Sum (线段树/技巧)
- LINUX 查看硬件配置命令
- 面试/笔试第四弹 —— 多线程面试问题集锦
- 时间管理
- SpringBoot配置属性之MVC(一)
- vim编辑器(1):介绍、入门
- 思考人生
- 论文笔记-Person Re-identification Past, Present and Future
- qt 类和对象 银行存款取款