划分树解。
主席树解MLE。

 /* 3473 */
#include <iostream>
#include <sstream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
#define LL __int64 const int maxn = 1e5+;
int order[maxn];
int val[][maxn];
int toLeft[][maxn];
LL sum[][maxn];
int n;
LL ans; void Build(int l, int r, int dep) {
if (l == r) {
toLeft[dep][l] = toLeft[dep][l-] + ;
sum[dep][l] = sum[dep][l-] + val[dep][l];
return ;
} int mid = (l + r) >> ;
int same = mid - l + ;
rep(i, l, r+) {
if (val[dep][i] < order[mid])
--same;
} int lpos = l, rpos = mid + ;
rep(i, l, r+) {
if (val[dep][i] < order[mid]) {
val[dep+][lpos++] = val[dep][i];
} else if (val[dep][i]==order[mid] && same>) {
val[dep+][lpos++] = val[dep][i];
--same;
} else {
val[dep+][rpos++] = val[dep][i];
} sum[dep][i] = sum[dep][i-] + val[dep][i];
toLeft[dep][i] = toLeft[dep][l-] + lpos - l;
} Build(l, mid, dep+);
Build(mid+, r, dep+);
} int Query(int l, int r, int k, int L, int R, int dep) {
if (l == r)
return val[dep][l]; int mid = (L + R) >> ;
int tmp = toLeft[dep][r] - toLeft[dep][l-]; if (tmp >= k) {
int s = mid++l-L-(toLeft[dep][l-] - toLeft[dep][L-]);
int e = mid+r-L+ - (toLeft[dep][r] - toLeft[dep][L-]); ans += sum[dep+][e] - sum[dep+][s-]; int ll = L + toLeft[dep][l-] - toLeft[dep][L-];
int rr = ll + tmp - ; return Query(ll, rr, k, L, mid, dep+);
} else {
int s = L + toLeft[dep][l-] - toLeft[dep][L-];
int e = s + tmp - ; ans -= sum[dep+][e] - sum[dep+][s-]; k -= tmp;
int rr = r + toLeft[dep][R] - toLeft[dep][r];
int ll = rr - (r-l+ - tmp) + ; return Query(ll, rr, k, mid+, R, dep+);
}
} void solve() {
int q; sort(order+, order++n);
Build(, n, ); int l, r, kth;
int tmp; scanf("%d", &q);
while (q--) {
scanf("%d %d", &l, &r);
++l;
++r;
kth = ((l + r) >> ) - l + ;
ans = ;
tmp = Query(l, r, kth, , n, );
if (((r-l+) & ) == )
ans -= tmp;
printf("%I64d\n", ans);
}
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int t; scanf("%d", &t);
rep(tt, , t+) {
scanf("%d", &n);
rep(i, , n+) {
scanf("%d", &val[][i]);
order[i] = val[][i];
}
printf("Case #%d:\n", tt);
solve();
putchar('\n');
} #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}

数据发生器。

 from copy import deepcopy
from random import randint, shuffle
import shutil
import string def GenDataIn():
with open("data.in", "w") as fout:
t = 10
bound = 10**5
fout.write("%d\n" % (t))
for tt in xrange(t):
n = bound
q = randint(10, 20)
fout.write("%d\n" % (n))
L = []
for i in xrange(n):
x = randint(1, bound)
L.append(x)
fout.write(" ".join(map(str, L)) + "\n")
fout.write("%d\n" % (q))
for i in xrange(q):
l = randint(0, n-1)
r = randint(l, n-1)
fout.write("%d %d\n" % (l, r)) def MovDataIn():
desFileName = "F:\eclipse_prj\workspace\hdoj\data.in"
shutil.copyfile("data.in", desFileName) if __name__ == "__main__":
GenDataIn()
MovDataIn()

【HDOJ】3473 Minimum Sum的更多相关文章

  1. 【HDOJ】1003 Max Sum

    最开始使用递归DP解,stack overflow.化简了一些,复杂度为O(n)就过了. #include <stdio.h> int main() { int case_n, n; in ...

  2. 【HDOJ】1394 Minimum Inversion Number

    逆序数的性质.1. 暴力解 #include <stdio.h> #define MAXNUM 5005 int a[MAXNUM]; int main() { int n; int i, ...

  3. 【HDOJ】1244 Max Sum Plus Plus Plus

    这题目一直wa,原来是因为我把JUDGE写错了,对拍了一下午都没检查出来.水DP啊. #include <cstdio> #include <cstring> #include ...

  4. 【HDOJ】P2058 The sum problem

    题意很简单就是给你一个N和M,让你求在1-N的那些个子序列的值等于M 首先暴力法不解释,简单超时 再仔细想一想可以想到因为1-N是一个等差数列,可以运用我们曾经学过的只是来解决 假设开始的位置为s,结 ...

  5. 【HDOJ】1385 Minimum Transport Cost

    Floyd.注意字典序!!! #include <stdio.h> #include <string.h> #define MAXNUM 55 #define INF 0x1f ...

  6. 【leetcode】963. Minimum Area Rectangle II

    题目如下: Given a set of points in the xy-plane, determine the minimum area of any rectangle formed from ...

  7. 【LeetCode】813. Largest Sum of Averages 解题报告(Python)

    [LeetCode]813. Largest Sum of Averages 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...

  8. 【LeetCode】113. Path Sum II 解题报告(Python)

    [LeetCode]113. Path Sum II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fu ...

  9. 【LeetCode】452. Minimum Number of Arrows to Burst Balloons 解题报告(Python)

    [LeetCode]452. Minimum Number of Arrows to Burst Balloons 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https ...

随机推荐

  1. select绑定json数组对象 asp.net

    ashx处理页 string JsonList = "["; IList<Models.Channel> ilist = BLL.ChannelManager.GetA ...

  2. 模仿 ios 分段单选

    http://blog.csdn.net/qduningning/article/details/37935227 res/drawable/seg_left.xml <?xml version ...

  3. emoji处理方法汇总

    emoji资料 今天研究了emoji,挺有意思,资料挺多,摘要一些信息给大家分享,也算是自己记录学习. emoji介绍 Emoji (絵文字,词义来自日语えもじ,e-moji,moji在日语中的含义是 ...

  4. IP HELPER GetAdaptersAddresses 函数

    自己做的一些笔记,XP以及以后的系统使用: MSDN 函数:http://msdn.microsoft.com/en-US/library/windows/desktop/aa365915(v=vs. ...

  5. JSP 隐藏对象

    [摘要]     隐藏对象用在jsp表达式和脚本中,不能直接用在jsp声明中,因为这些隐藏对象是容器在jspservice方法中定义的,在这个方法中定义的变量不能在jsp声明中使用.可以通过参数方法将 ...

  6. raise_application_error用法

    我们经常通过dbms_output.put_line来输出异常信息,但有时需要把异常信息返回给调用的客户端.此时我们用raise_application_error,允许用户在pl/sql中返回用户自 ...

  7. MVC5 Bundles发布到IIS失效问题解决方案

    MVC中Bundles可以提高代码的可重用性 我每个页面都需要用到这十几个JS+CSS 当我把MVC发布到服务器以后,Bundles中的JS和CSS会失效的时候 宝宝的心里是崩溃的.... 查了很多资 ...

  8. BZOJ 1588 营业额统计 Splay

    主要操作为Splay中插入节点,查找前驱和后继节点. 1: #include <cstdio> 2: #include <iostream> 3: #include <c ...

  9. 关于 .net 开发 Office Word 的一些问题小结

    1.在"组件服务"的DCom配置中找到Microsoft Office Word =>属性=>标识选项卡,然后选择交互式用户:::=>"安全" ...

  10. 如何让VS根据编译环境选择相应的配置文件

    其实微软还是蛮有创造力的,一个配置文件居然弄了这么多的形式,从原来的ini到现在的xml,总而言之让我们这些在微软殿堂里的程序员翘着屁股追赶. 微软最新的配置文件实际上就是个xml文件,以后缀名.co ...