栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3260 Boring Sequence Oper...

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3260 Boring Sequence Oper...

#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>#include<string>#include<map>#include<set>#include<vector>#include<queue>#include<stack>#include<ctime>using namespace std;#define rep(i, a, b) for (int i = (a); i <= (b); ++i)#define red(i, a, b) for (int i = (a); i >= (b); --i)#define clr( x , y ) memset(x,y,sizeof(x))#define mp make_pair#define pb push_back#define sqr(x) ((x) * (x))typedef long long lint;const int mm = 9875321;lint f[110000] , d[110000];int n , m , l[110000] , r[110000];void init(){    l[1] = 0; r[1] = n - 1;    f[1] = 0; d[1] = 1;    n = 1;}void deal(int t){    int x , y , k;    if ( t < 4 ) scanf("%d%d%d",&x,&y,&k); else scanf("%d%d",&x,&y);    y --;    rep(i,1,n) if ( max( x , l[i] ) <= min( y , r[i] ) ) {        if ( l[i] >= x && r[i] <= y ) { if ( t == 1 ) f[i] += k; if ( t == 2 ) f[i] *= k , d[i] *= k; if ( t == 3 ) {     k %= y - x + 1;     l[i] += k;  r[i] += k;     if ( l[i] <= y && r[i] > y ) {         l[++n] = y + 1 - k; r[n] = r[i] - k;         d[n] = d[i]; f[n] = f[i] + ( y + 1 - l[i] ) * d[i];         r[i] = y;     }     if ( l[i] > y ) l[i] = l[i] - y + x - 1;     if ( r[i] > y ) r[i] = r[i] - y + x - 1; } if ( t == 4 ) {     f[i] += d[i] * ( r[i] - l[i] );  d[i] = -d[i];     l[i] = x + y - l[i];  r[i] = x + y - r[i];     swap( l[i] , r[i] ); }        } else if ( x > l[i] ) { l[++n] = x;  r[n] = r[i];  d[n] = d[i]; f[n] = f[i] + d[i] * ( x - l[i] );  r[i] = x - 1;        } else { l[++n] = l[i]; r[n] = y;  d[n] = d[i]; f[n] = f[i]; f[i] += ( y + 1 - l[i] ) * d[i];  l[i] = y + 1;        }    }    rep(i,1,n) d[i] %= mm , f[i] %= mm;}void sum(){    lint s = 0;    int x , y;    scanf("%d%d",&x,&y);    y --;    rep(i,1,n) {        int ll = max( x , l[i] ) , rr = min( y , r[i] );        if ( ll > rr ) continue;        lint xx =  ( ll + rr - 2 * l[i] ) * d[i] + 2 * f[i] , yy = rr - ll + 1;        if ( yy & 1 ) xx /= 2; else yy /= 2;        xx %= mm; yy %= mm;        ( s += xx * yy ) %= mm;    }    cout << ( s + mm ) % mm << endl;}void work(){    string s;    while ( m -- ) {        cin >> s;        int t = 0;        if ( s[0] == 'a' ) t = 1;        if ( s[0] == 'm' ) t = 2;        if ( s[1] == 'o' ) t = 3;        if ( s[1] == 'e' ) t = 4;        if ( t ) deal( t );        if ( s[0] == 's' ) sum();    }    puts("");}int main(){    while ( cin >> n >> m ) {        init();        work();    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375842.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号