首页 技术 正文
技术 2022年11月11日
0 收藏 589 点赞 4,085 浏览 2782 个字

神仙分块题?其实还是很简单的,res[i][j]表示第i块到第j块的众数,然后再用sum[i][j]表示前i块中j这个种类出现的次数,然后分块瞎搞就行了,感觉我写的十分简洁,好评(

//author Eterna
#define Hello the_cruel_world!
#pragma GCC optimize(2)
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<utility>
#include<cmath>
#include<climits>
#include<deque>
#include<functional>
#include<complex>
#include<numeric>
#include<unordered_map>
#define Pi acos(-1.0)
#define ABS(x) ((x) >= 0 ? (x) : (-(x)))
#define pb(x) push_back(x)
#define lowbit(x) (x & -x)
#define FRIN freopen("C:\\Users\\Administrator.MACHENI-KA32LTP\\Desktop\\in.txt", "r", stdin)
#define FROUT freopen("C:\\Users\\Administrator.MACHENI-KA32LTP\\Desktop\\out.txt", "w", stdout)
#define FAST ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define outd(x) printf("%d\n", x)
#define outld(x) printf("%lld\n", x)
#define il inline
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int maxn = 4e4;
const int maxm = 2e2;
const int INF = 0x7fffffff;
const int mod = 1e9 + ;
const double eps = 1e-;
inline int read_int() {
char c;
int ret = , sgn = ;
do { c = getchar(); } while ((c < '' || c > '') && c != '-');
if (c == '-') sgn = -; else ret = c - '';
while ((c = getchar()) >= '' && c <= '') ret = ret * + (c - '');
return sgn * ret;
}
inline ll read_ll() {
char c;
ll ret = , sgn = ;
do { c = getchar(); } while ((c < '' || c > '') && c != '-');
if (c == '-') sgn = -; else ret = c - '';
while ((c = getchar()) >= '' && c <= '') ret = ret * + (c - '');
return sgn * ret;
}
int res[maxm + ][maxm + ], sum[maxm + ][maxn + ], cnt[maxn + ];
int block, arr[maxn + ], ID[maxn + ];
int n, q, last;
int m, pos[maxn + ];
void pre_init() {
for (int i = ; i <= n; ++i)++sum[ID[i]][arr[i]];
for (int i = ; i <= m; ++i)for (int j = ; j <= ID[n]; ++j)sum[j][i] += sum[j - ][i];
for (int i = ; i <= ID[n]; ++i) {
memset(cnt, , sizeof(cnt));
for (int j = (i - ) * block + ; j <= n; ++j) {
int p = arr[j], k = res[i][ID[j - ]];
++cnt[p];
if (cnt[p] > cnt[k])res[i][ID[j]] = p;
else if (cnt[p] == cnt[k] && p < k)res[i][ID[j]] = p;
else res[i][ID[j]] = k;
}
}
memset(cnt, , sizeof(cnt));
}
int Query(int L, int R) {
int ans = res[ID[L] + ][ID[R] - ], tot = max(, sum[ID[R] - ][ans] - sum[ID[L]][ans]);
for (int i = L; i <= min(ID[L] * block, R); ++i) {
int p = arr[i];
++cnt[p];
int s = cnt[p] + max(, (sum[ID[R] - ][p] - sum[ID[L]][p]));
if (s > tot) ans = p, tot = s;
else if (s == tot && p < ans)ans = p;
}
if (ID[L] != ID[R]) {
for (int i = (ID[R] - )*block + ; i <= R; ++i) {
int p = arr[i];
++cnt[p];
int s = cnt[p] + max(, (sum[ID[R] - ][p] - sum[ID[L]][p]));
if (s > tot) ans = p, tot = s;
else if (s == tot && p < ans)ans = p;
}
}
for (int i = L; i <= min(ID[L] * block, R); ++i)--cnt[arr[i]];
if (ID[L] != ID[R])for (int i = (ID[R] - ) * block + ; i <= R; ++i)--cnt[arr[i]];
return ans;
}
int main()
{
n = read_int(), q = read_int();
block = ceil(sqrt(n));
for (int i = ; i <= n; ++i) pos[i] = arr[i] = read_int(), ID[i] = (i - ) / block + ;
sort(pos + , pos + + n);
m = unique(pos + , pos + + n) - pos - ;
for (int i = ; i <= n; ++i)arr[i] = lower_bound(pos + , pos + + m, arr[i]) - pos;
pre_init();
for (int i = ; i <= q; ++i) {
int l = read_int(), r = read_int();
l = (l + last - ) % n + , r = (r + last - ) % n + ;
if (l > r)swap(l, r);
last = pos[Query(l, r)];
outd(last);
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,499
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,912
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,746
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,503
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,142
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,305