洛谷4月月赛R2

打酱油...

A.koishi的数学题

线性筛约数和就可以\(O(N)\)了...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <ctime>
using namespace std;
typedef long long ll;
const int N=1e6+5;
inline ll read(){
char c=getchar(); ll x=0,f=1;
while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
} bool notp[N]; int p[N/10], lp[N]; ll si[N];
void sieve(int n) {
si[1] = 1;
for(int i=2; i<=n; i++) {
if(!notp[i]) p[++p[0]] = i, lp[i] = i, si[i] = 1+i;
for(int j=1; j <= p[0] && i*p[j] <= n; j++) {
int t = i*p[j]; notp[t] = 1;
if(i % p[j] == 0) {
lp[t] = lp[i] * p[j];
if(lp[t] == t) si[t] = si[i] + lp[t];
else si[t] = si[t / lp[t]] * si[lp[t]];
break;
}
lp[t] = p[j];
si[t] = si[i] * (1 + p[j]);
}
}
for(int i=1; i<=n; i++) si[i] += si[i-1];
} int n;
int main() {
n=read();
sieve(n);
for(int i=1; i<=n; i++) printf("%lld ", (ll) n * i - si[i]);
}

B:大爷的字符串题

卡读题...

容易发现就是求区间出现次数最多的权值

把区间众数的分块复制上T掉了,怒写莫队

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=2e5+5, mo = 998244353;
inline ll read(){
char c=getchar(); ll x=0,f=1;
while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
} int n, Q, a[N], ans[N], mp[N], pos[N], block;
struct meow{
int l, r, id;
bool operator <(const meow &a) const {return pos[l] == pos[a.l] ? r < a.r : pos[l] < pos[a.l];}
} q[N]; int c[N], d[N], l, r, now;
inline void add(int x) {
d[c[x]]--; d[ ++c[x] ]++;
while(d[now+1]) now++;
}
inline void del(int x) {
d[c[x]]--; d[ --c[x] ]++;
while(!d[now]) now--;
}
void modui() {
l=1; r=0; d[0] = n;
sort(q+1, q+1+Q);
for(int i=1; i<=Q; i++) {
while(r < q[i].r) add(a[++r]);
while(r > q[i].r) del(a[r--]);
while(l < q[i].l) del(a[l++]);
while(l > q[i].l) add(a[--l]);
ans[ q[i].id ] = now;
}
}
int main() {
// freopen("in", "r", stdin);
n=read(); Q=read(); block = sqrt(n);
for(int i=1; i<=n; i++) mp[i] = a[i] = read(), pos[i] = (i-1)/block+1;
for(int i=1; i<=Q; i++) q[i].l = read(), q[i].r = read(), q[i].id = i;
sort(mp+1, mp+1+n); mp[0] = unique(mp+1, mp+1+n) - mp - 1;
for(int i=1; i<=n; i++) a[i] = lower_bound(mp+1, mp+1+mp[0], a[i]) - mp;
modui();
for(int i=1; i<=Q; i++) printf("%d\n", -ans[i]);
}

C:仓鼠的数学题

不会...我多项式除了算卷积什么都不会...

update:现在会了,在另一篇文章上

D:方方方的数据结构

题意:支持区间加,区间乘,单店询问,撤销某次操作


一眼感觉可以用线段树分治做,然后写写写,拍了几组数据不对啊...

然后调了两个小时,突然发现,因为有乘标记,每个操作不是独立的!,这还分治什么啊。

感觉其他的做法都很神奇

放一个错误的代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
const int N=2e5+5, mo = 998244353;
inline ll read(){
char c=getchar(); ll x=0,f=1;
while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
} int n, m, op, l, r, d, p, ans[N];
struct meow {
int op, l, r, d, s, t, id;
void print() {
printf("meow %d [%d, %d] %d [%d, %d]\n", op, l, r, d, s, t);
}
};
typedef vector<meow> vm;
vm a;
meow st[N]; int top; inline void mod(ll &x) {if(x>=mo) x-=mo; else if(x<0) x+=mo;}
inline int Pow(ll a, int b) {
mod(a);
ll ans=1;
for(; b; b>>=1, a=a*a%mo)
if(b&1) ans=ans*a%mo;
return ans;
}
namespace seg {
#define mid ((l+r)>>1)
#define lc x<<1
#define rc x<<1|1
#define lson lc, l, mid
#define rson rc, mid+1, r
struct node{ ll val, a, b; node():b(1){} } t[N<<2];
inline void _add(int x, ll d) {
mod(t[x].a += d); mod(t[x].val += d);
}
inline void _mul(int x, ll d) {
t[x].a = (t[x].a * d) %mo;
t[x].b = (t[x].b * d) %mo;
t[x].val = (t[x].val * d) %mo;
}
inline void pushdn(int x) {
if(t[x].b != 1) {
_mul(lc, t[x].b);
_mul(rc, t[x].b);
t[x].b = 1;
}
if(t[x].a) {
_add(lc, t[x].a);
_add(rc, t[x].a);
t[x].a = 0;
}
}
void add(int x, int l, int r, int ql, int qr, ll d) {
if(ql<=l && r<=qr) _add(x, d);
else {
pushdn(x);
if(ql <= mid) add(lson, ql, qr, d);
if(mid < qr ) add(rson, ql, qr, d);
}
}
void mul(int x, int l, int r, int ql, int qr, ll d) {
if(ql<=l && r<=qr) _mul(x, d);
else {
pushdn(x);
if(ql <= mid) mul(lson, ql, qr, d);
if(mid < qr ) mul(rson, ql, qr, d);
}
}
int que(int x, int l, int r, int p) {
if(l == r) return t[x].val;
else {
pushdn(x);
if(p <= mid) return que(lson, p);
else return que(rson, p);
}
} #undef mid
}
inline void add(int l, int r, int d) {
seg::add(1, 1, n, l, r, d);
}
inline void mul(int l, int r, int d) {
seg::mul(1, 1, n, l, r, d);
}
void recov(int bot) {
while(top != bot) {
meow &now = st[top--];
if(now.op == 1) add(now.l, now.r, -now.d);
if(now.op == 2) mul(now.l, now.r, Pow(now.d, mo-2));
}
} int Q;
void cdq(int l, int r, vm &a) { if(l==1 && r==4) return;printf("\n-----------cdq [%d, %d]\n\n", l, r);
int mid = (l+r)>>1, bot = top;
vm b, c;
for(int i=0; i < (int)a.size(); i++) { //[s, t]
meow &now = a[i];
if(now.op == 4) continue;
printf("now %d [%d, %d]\n", now.id, now.s, now.t);
if(now.s == l && now.t == r) { puts("get");
if(now.op == 1) add(now.l, now.r, now.d);
if(now.op == 2) mul(now.l, now.r, now.d);
if(now.op == 3) ans[++Q] = seg::que(1, 1, n, now.l); if(now.op <= 2) st[++top] = now;
}
else if(now.t <= mid) b.push_back(now);
else if(mid < now.s) c.push_back(now);
else {
meow q = now;
q.s = now.s; q.t = mid; b.push_back(q);
q.s = mid+1; q.t = now.t; c.push_back(q);
}
}
if(l != r) {
if(b.size()) cdq(l, mid, b);
if(c.size()) cdq(mid+1, r, c);
}
recov(bot);
} int main() {
freopen("in", "r", stdin);
//freopen("a.out", "w", stdout);
n=read(); m=read();
for(int i=1; i<=m; i++) {
op=read();
if(op == 1) l=read(), r=read(), d=read(), a.push_back( (meow){op, l, r, d, i, -1, i} );
if(op == 2) l=read(), r=read(), d=read(), a.push_back( (meow){op, l, r, d, i, -1, i} );
if(op == 3) p=read(), a.push_back( (meow){op, p, 0, 0, i, i, i} );
if(op == 4) p=read()-1, a[p].t = i, a.push_back( (meow){4, 0, 0, 0, i, i, i} );
}
for(int i=0; i<m; i++) if(a[i].t == -1) a[i].t = m;
for(int i=0; i<m; i++) printf("%d ",i+1), a[i].print();
cdq(1, m, a);
for(int i=1; i<=Q; i++) {
if(ans[i] < 0) ans[i] += mo;
printf("%d\n", ans[i]);
}
//printf("\n\n%lld", ((ll)1e18 % mo + mo) %mo);
}

洛谷4月月赛R2的更多相关文章

  1. 洛谷10月月赛R2·浴谷八连测R3题解

    早上打一半就回家了... T1傻逼题不说了...而且我的写法比题解要傻逼很多T T T2可以发现,我们强制最大值所在的块是以左上为边界的倒三角,然后旋转4次就可以遍历所有的情况.所以二分极差,把最大值 ...

  2. 洛谷3月月赛 R1 Step! ZERO to ONE

    洛谷3月月赛 R1 Step! ZERO to ONE 普及组难度 290.25/310滚粗 t1 10分的日语翻译题....太难了不会... t2 真·普及组.略 注意长为1的情况 #include ...

  3. 【洛谷5月月赛】玩游戏(NTT,生成函数)

    [洛谷5月月赛]玩游戏(NTT,生成函数) 题面 Luogu 题解 看一下要求的是什么东西 \((a_x+b_y)^i\)的期望.期望显然是所有答案和的平均数. 所以求出所有的答案就在乘一个逆元就好了 ...

  4. 【LGR-054】洛谷10月月赛II

    [LGR-054]洛谷10月月赛II luogu 成功咕掉Codeforces Round #517的后果就是,我\(\mbox{T4}\)依旧没有写出来.\(\mbox{GG}\) . 浏览器 \( ...

  5. 【LGR-051】洛谷9月月赛

    [LGR-051]洛谷9月月赛 luogu 签到题 description 给出\(K\)和质数\(m\),求最小的\(N\)使得\(111....1\)(\(N\)个\(1\))\(\equiv k ...

  6. 「LGR-049」洛谷7月月赛 D.Beautiful Pair

    「LGR-049」洛谷7月月赛 D.Beautiful Pair 题目大意 : 给出长度为 \(n\) 的序列,求满足 \(i \leq j\) 且 $a_i \times a_j \leq \max ...

  7. 洛谷9月月赛round2

    洛谷9月月赛2 t1 题意:懒得说了 分析:模拟 代码: program flag; var a:..,..]of char; n,i,m,j,x,y,ans,k:longint; begin ass ...

  8. 「P4996」「洛谷11月月赛」 咕咕咕(数论

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  9. 「P4994」「洛谷11月月赛」 终于结束的起点(枚举

    题目背景 终于结束的起点终于写下句点终于我们告别终于我们又回到原点…… 一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演.如果这次 NO ...

随机推荐

  1. oracle ebs form开发总结

    item的布局千万不要去乱动,只要调好长宽和y轴的坐标就好了.form内部集成了很多代码对布局进行动态的调整,而且有一些代码的长宽什么的还是写死了的,我们一动,form可能就识别不了了,然后就显示出来 ...

  2. android仿微信红包动画、Kotlin综合应用、Xposed模块、炫酷下拉视觉、UC浏览器滑动动画等源码

    Android精选源码 仿微信打开红包旋转动画 使用Kotlin编写的Android应用,内容你想象不到 Android手机上的免Root Android系统日志Viewer 一个能让微信 Mater ...

  3. .NET MongoDB Driver 2.2 API注释

    主要内容 1 MongoClient 1.1构造函数 1.2 方法 2 IMongoDatabase 3 IMongoCollection 4 IMongoCollectionExtensions 5 ...

  4. 获取屏幕宽高度与可视区域宽高度(availWidth、clientWidth、width、innerWidth)

    经常会遇到需要获取屏幕宽度.高度,可视区域宽度.高度等问题,也就常跟这几个打交道,一不小心,还真爱弄混淆了. 先来列举下这几个吧: screen.availHeight.screen.availWid ...

  5. SpringBoot Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

    SpringBoot Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFact ...

  6. kafka producer生产数据到kafka异常:Got error produce response with correlation id 16 on topic-partition...Error: NETWORK_EXCEPTION

      kafka producer生产数据到kafka异常:Got error produce response with correlation id 16 on topic-partition... ...

  7. Spark算子--partitionBy

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/923b11fce561e82748baa016bcfb8421.html partitionBy--Trans ...

  8. 逢三退一(boolean数组的使用)

    package com.hanqi.count; // 逢三退一 输出留到最后值的索引; public class Count1 { //主方法 public static void main(Str ...

  9. How to bypass Win10 logon password?

    Usually we will use LiveView or VFC to "boot up" the evidence files acquired from suspect' ...

  10. QTP10破解方法及mgn-mqt82.exe下载

    经试验可以成功安装license,具体步骤如下:一.从HP官方网上下载QTP10.0并安装.二.安装成功后,在C:\Program Files\Common Files\Mercury Interac ...