LuoguP3948 数据结构

题目地址

题目链接

题解

以为这题虽然是数据随机也不至于那么水吧...

于是秉着先打部分分和暴力的原则先写了暴力和min,max为-inf和inf的特殊点,对于暴力搞了个小优化,延后的操作直接前缀和答案就好...

然后感觉数据随机的话能过\(n<=5000\)

交了发现跑的飞快,有了一点奇奇怪怪的想法,直接交暴力试试?

然后就过了。7000+ms...

效率是\(O(opt*n+final)\)的,因为数据随机所以其实也不用卡就能过去了...

我以为他的随机至少有部分构造数据来着...

然后看了官方题解居然也只是对暴力操作差分优化了一下...这个的效率也不对的其实...如果数据出到上界是过不去的...

(当时有想到这个但是算了效率是不对的于是cut掉了这个想法。还以为这题正解多高明233333)

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define inf 0x3f3f3f3f
#define N 200010
int n, opt, mod, Min, Max, fin;
ll a[N], sum[N];

namespace pts_1 {
    void solve() {
        int l, r, x;
        for(int i = 1; i <= opt; i ++) {
            char ch[10];
            scanf("%s%d%d", ch, &l, &r);
            if(ch[0] == 'A') {scanf("%d", &x); continue;} 
            printf("%d\n", r - l + 1);
        }
        scanf("%d", &fin);
        for(int i = 1; i <= fin; i ++) {
            scanf("%d%d", &l, &r);
            printf("%d\n", r - l + 1);
        }
    }
}

namespace pts_2 {
    void solve() {
        int l, r, x;
        for(int i = 1; i <= opt; i ++) {
            char ch[10];
            scanf("%s%d%d", ch, &l, &r);
            if(ch[0] == 'A') {
                scanf("%d", &x);
                for(int i = l; i <= r; i ++) a[i] += x;
            } else {
                ll ans = 0;
                for(int i = l; i <= r; i ++) {
                    ans += a[i] * i % mod >= Min && a[i] * i % mod <= Max;
                }
                printf("%lld\n", ans);
            } 
        }
        for(int i = 1; i <= n; i ++) {
            sum[i] = sum[i - 1] + (a[i] * i % mod >= Min && a[i] * i % mod <= Max);
        }
        scanf("%d", &fin);
        while(fin--) {
            scanf("%d%d", &l, &r);
            printf("%lld\n", sum[r] - sum[l - 1]);
        }
    }
}

int main() {
    scanf("%d%d%d%d%d", &n, &opt, &mod, &Min, &Max);
    if(Min <= -inf && Max >= inf) {pts_1::solve(); return 0;}
    else {
        if(n <= 5000) {pts_2::solve(); return 0;}
        pts_2::solve(); return 0;
    }
}
全部评论

相关推荐

鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务