HDU 3874 Necklace
莫队算法。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<algorithm>
using namespace std; const int maxn = + ;
int n, m;
int a[maxn],pos[maxn],cnt[+];
long long ans[+], Ans;
int L, R;
struct X
{
int l, r, id;
}s[+]; bool cmp(const X&a, const X&b)
{
if (pos[a.l] == pos[b.l]) return a.r < b.r;
return a.l < b.l;
} int main()
{
int T; scanf("%d",&T);
while (T--)
{
memset(cnt,,sizeof cnt);
scanf("%d", &n);
int sz = sqrt(n);
for (int i = ; i <= n; i++)
{
pos[i] = i / sz;
scanf("%d", &a[i]);
} scanf("%d", &m);
for (int i = ; i <= m; i++) {
scanf("%d%d", &s[i].l, &s[i].r);
s[i].id = i;
}
sort(s + , s + + m, cmp);
Ans=;
for (int i = s[].l; i <= s[].r; i++)
{
cnt[a[i]]++;
if(cnt[a[i]]==) Ans=Ans+(long long)a[i];
}
ans[s[].id] = Ans; L = s[].l; R = s[].r; for (int i = ; i <= m; i++)
{
while (L < s[i].l)
{
cnt[a[L]]--;
if(cnt[a[L]]==) Ans=Ans-(long long)a[L];
L++;
}
while (L > s[i].l)
{
L--;
cnt[a[L]]++;
if(cnt[a[L]]==) Ans=Ans+(long long)a[L];
}
while (R < s[i].r)
{
R++;
cnt[a[R]]++;
if(cnt[a[R]]==) Ans=Ans+(long long)a[R];
}
while (R > s[i].r)
{
cnt[a[R]]--;
if(cnt[a[R]]==) Ans=Ans-(long long)a[R];
R--;
}
ans[s[i].id] = Ans;
} for (int i = ; i <= m; i++) printf("%lld\n", ans[i]);
}
return ;
}
HDU 3874 Necklace的更多相关文章
- HDU 3874 Necklace 区间查询的离线操作
题目: http://acm.hdu.edu.cn/showproblem.php?pid=3874 对需要查询的区间按右端点排序,然后从左到右依次加入序列中的元素,同时更新,更新的方法是,把上一次出 ...
- HDU 3874 Necklace (树状数组 | 线段树 的离线处理)
Necklace Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- hdu 3874 Necklace(bit树+事先对查询区间右端点排序)
Mery has a beautiful necklace. The necklace is made up of N magic balls. Each ball has a beautiful v ...
- HDU - 3874 Necklace (树状数组、离线处理)
题目链接:Necklace 题意: 给出一串珠子,每个珠子有它的value,现在给出n(n<=5e4)个珠子的value(1<=value<=1e6),现在给出m(1<=m&l ...
- HDU - 3874 Necklace (线段树 + 离线处理)
欢迎參加--每周六晚的BestCoder(有米! ) Necklace Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65536/3 ...
- hdu 3874 Necklace(线段树)
这道题目和我之前做过的一道3xian大牛出的题目很像,不过总的来说还是要简单一点儿. 计算区间内的值的时候如果两个值相等,只能计算其中一个. 这道题需要将所有的问题输入之后再计算,首先,对所有问题的右 ...
- HDU 3874 Necklace 树状数组
题意:求区间内不同的数的和 离线处理,按查询右端点从小到大排序,从左往右扫一遍. 记录每个数出现的上一个位置,如果该数之前没有出现过,就加上,否则就在上一个位置减去. #include <cst ...
- Necklace HDU - 3874 (线段树/树状数组 + 离线处理)
Necklace HDU - 3874 Mery has a beautiful necklace. The necklace is made up of N magic balls. Each b ...
- hdu 5727 Necklace dfs+二分图匹配
Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...
随机推荐
- STM32F407IG开启FPU,做开方运算
STM32F407IG开启FPU,做开方运算 MDK KEIL中使用STM32F4XX芯片硬件浮点单元FPU Keil中使用STM32F4xx硬件浮点单元 STM32F4-浮点DSP库的MDK开发环境 ...
- event小解
首先是一个小例子: <input type="text" onclick="a(event)"/> function a(event){ con ...
- OpenLayers 3 的地图基本操作
<body> <div id="map"> <div id="menu"> <button id="zoom ...
- tiny210移植linux内核(3.0.8)杂项
关于三星芯片nand内存分区文件: linux-3.0.8/drivers/mtd/nand/s3c_nand.c struct mtd_partition s3c_partition_info[] ...
- final关键字修饰的变量
final意义:最终的,不可改变的. 1.修饰变量,为常量,值不可变: 2.修饰对象,值可变,引用不变: 3.修饰方法,方法不可重写: 4.修饰类,无子类,不可以被继承,更不可能被重写. 1.fina ...
- UVALive 2523 Machine Schedule(二分图求最大匹配数)
题意:有两台机器,上面有多个工作区域,有多个任务,分别可以在两台机器的某一个区域上完成,两台机器一开始都在0区域上工作,每次更改区域,都会重新启动一次,让我们求出最小的重启次数. 思路:将两个区域连线 ...
- 转:WebDriver(Selenium2) 判断页面是否刷新的方法
public static boolean waitPageRefresh(WebElement trigger) { int refreshTime = 0; boolean isRefresh = ...
- USACO Section 1.3 Combination Lock 解题报告
题目 题目描述 农夫John的牛从农场逃脱出去了,所以他决定用一个密码锁来把农场的门锁起来,这个密码锁有三个表盘,每个表盘都是环形的,而且上面刻有1~N,现在John设了一个开锁密码,而且这个锁的设计 ...
- 阅读 LdrInitializeThunk
参考: http://blog.csdn.net/hw_henry2008/article/details/6568255 Windows 的 DLL 装入(除 ntdll.dll 外)和连接是通过 ...
- P2P应用中的NAT穿透问题
多年前曾经写过一个关于NAT钻洞的实验.现在发现那个做法在我现在的路由器上已经不管用了.经过一番搜索发现时过境迁,世界变化很快,新路由器已经是UPnP了.在这里重新理一下几种方法. 第一种,也是不太靠 ...