【CF】220B Little Elephant and Array
区间动态统计的好题。
- /* */
- #include <iostream>
- #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>
- using namespace std;
- //#pragma comment(linker,"/STACK:102400000,1024000")
- #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 pb push_back
- #define mp make_pair
- #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
- typedef struct inter_t {
- int l, r, id, ans;
- inter_t() {}
- inter_t(int _l, int _r, int _id, int _ans=):
- l(_l), r(_r), id(_id), ans(_ans) {}
- friend bool operator< (const inter_t& a, const inter_t& b) {
- if (a.r == b.r)
- return a.l > b.l;
- else
- return a.r < b.r;
- }
- } inter_t;
- const int maxn = 1e5+;
- vector<int> vc[maxn];
- int sz[maxn];
- vector<inter_t> Q;
- map<int,int> tb;
- int d[maxn];
- int a[maxn], l = ;
- int v[maxn];
- bool comp(const inter_t& a, const inter_t& b) {
- return a.id < b.id;
- }
- int main() {
- int i, j, k;
- int n, m;
- #ifndef ONLINE_JUDGE
- freopen("data.in", "r", stdin);
- freopen("data.out", "w", stdout);
- #endif
- scanf("%d %d", &n, &m);
- for (i=; i<=n; ++i)
- scanf("%d", &a[i]);
- int li, ri;
- for (i=; i<m; ++i) {
- scanf("%d %d", &li, &ri);
- Q.push_back(inter_t(li, ri, i));
- }
- sort(Q.begin(), Q.end());
- Q.push_back(inter_t(,n+,m));
- memset(d, , sizeof(d));
- memset(sz, , sizeof(sz));
- int r = , mr, x, id, p, cnt;
- i = ;
- while (i < m) {
- mr = Q[i].r;
- while (r <= mr) {
- x = a[r];
- id = tb[x];
- if (id == ) {
- tb[x] = id = l;
- l++;
- v[l] = x;
- }
- vc[id].push_back(r);
- ++sz[id];
- if (sz[id] >= x) {
- p = vc[id][sz[id]-x];
- ++d[p];
- }
- if (sz[id] >= x+) {
- p = vc[id][sz[id]-x-];
- d[p] -= ;
- }
- if (sz[id] > x+) {
- p = vc[id][sz[id]-x-];
- ++d[p];
- }
- ++r;
- }
- cnt = ;
- k = mr+;
- while (Q[i].r == mr) {
- for (j=Q[i].l; j<k; ++j)
- cnt += d[j];
- Q[i].ans = cnt;
- k = Q[i].l;
- ++i;
- }
- }
- sort(Q.begin(), Q.end(), comp);
- for (i=; i<m; ++i)
- printf("%d\n", Q[i].ans);
- #ifndef ONLINE_JUDGE
- printf("time = %d.\n", (int)clock());
- #endif
- return ;
- }
【CF】220B Little Elephant and Array的更多相关文章
- 【26】Remove Duplicates from Sorted Array
[26]Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such th ...
- 【LeetCode】697. Degree of an Array 解题报告
[LeetCode]697. Degree of an Array 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/degree- ...
- 【LeetCode】Search in Rotated Sorted Array——旋转有序数列找目标值
[题目] Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- 【LeetCode】Two Sum II - Input array is sorted
[Description] Given an array of integers that is already sorted in ascending order, find two numbers ...
- php基础知识【函数】(1)数组array
一.排序 1.sort -- 从最低到最高排序,删除原有的键名,赋予新的键名[字母比数字高] 2.rsort -- 逆向排序(最高到最低),删除原有的键名,赋予新的键名[字母比数字高] 3.asort ...
- 【leetcode】Remove Duplicates from Sorted Array II
Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...
- 【leetcode】Search in Rotated Sorted Array II
Search in Rotated Sorted Array II Follow up for "Search in Rotated Sorted Array":What if d ...
- 【leetcode】Search in Rotated Sorted Array
Search in Rotated Sorted Array Suppose a sorted array is rotated at some pivot unknown to you before ...
- 【leetcode】Search in Rotated Sorted Array (hard)
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
随机推荐
- 科讯CMS V9标签清单
全新整理V9标签清单 ====================网站通用标签============== {$GetSiteTitle} 显示网站标题 {$GetSiteName} 显示网站名称 {$G ...
- 基于Memcache的分布式缓存系统详解
文章不是简单的的Ctrl C与V,而是一个字一个标点符号慢慢写出来的.我认为这才是是对读者的负责,本教程由技术爱好者成笑笑(博客:http://www.chengxiaoxiao.com/)写作完成. ...
- UESTCOJ-BiliBili, ACFun… And More!(水题)
BiliBili, ACFun… And More! Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Ja ...
- Asp.net: WebForm基础上构建Mvc的方法
添加引用: System.Web.Routing System.Web.Abstractions System.Web.Mvc 添加文件夹: Controllers, Views, Views / ...
- P2P之UDP穿透NAT原理
首先先介绍一些基本概念: NAT(Network Address Translators),网络地址转换:网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就 ...
- java.lang.InstantiationError: sun.net.ftp.FtpClient
发送邮件功能.本地可以,测试环境上报错.是JDK 版本导致的,,本地1.6 测试环境JDK 1.7 解决办法: 1.测试环境重新配置jdk 1.6 环境.. 2.安装 JDK 1.7 ...
- 原生与jqueryDOM
总结与复习原生与jquery的DOM操作. 获取元素节点: $(".class") $("#id") $(".class div") $(& ...
- LINUX 压缩目录成一个压缩文件
#!/bin/bash file =$(date +%y%m%d%H%M)logfile=/home/目录名/backup/file.log echo "------"$(date ...
- web版扫雷小游戏(三)
~~~接上篇,上篇介绍了游戏实现过程中第一个比较繁琐的地方,现在展现在玩家面前的是一个有血有肉的棋盘,从某种意义上说玩家已经可以开始游戏了,但是不够人性化,玩家只能一个一个节点的点开,然后判断,然后标 ...
- EF+WCF怎样更新数据?
public virtual void Update(T entity) { T current = this.Where(m => m.Id.Equals(entity.Id)) .Singl ...