日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

Input

第一行兩個整數n;m 表示電子個數和詢問個數.
接下來n 行, 每行兩個整數x; y 表示vi.
接下來m 行, 每行形如1 p x y 或2 l r, 分別表示兩種操作.

Output

對于每個操作2, 輸出一行一個整數表示飄升系數對20170927 取模的值.

Sample Input

9 5
13052925 5757314
9968857 11135327
13860145 3869873
6912189 3461377
2911603 7061332
6334922 7708411
5505379 5915686
6806727 588727
7603043 15687404
2 1 6
1 7 2602783 18398476
1 8 8636316 19923037
2 2 7
2 2 4

Sample Output

18529202
963126
19167545

Data Constraint

Solution

  • 首先,我們要知道向量的叉積,如何計算:

  • 對于兩個平面向量 (x1,y1)(x2,y2) ,根據定義,其叉積即為:x1?y2?x2?y1

  • 而題目需要求:

    li<jr|vi?vj|2=li<jr(ai?bj?aj?bi)2

  • 經過加減的轉化,上式可以化為:

    (i=1na2i)(i=1nb2i)?(i=1naibi)2

  • 這樣每個值都只與自己有關,于是就可以用線段樹維護。

  • 每個點存儲 a2i 、 b2iaibi 這三種值,再區間分別維護這三種值的和即可。

  • 當修改單個向量時,就在線段樹中單點修改即可。

  • 時間復雜度為 O((N+M)?log?N) 。

Code

#include<cstdio> using namespace std; const int N=1e6+1,mo=20170927; struct data{long long x,y,z;}a[N],z; data operator +(data x,data y) {z.x=(x.x+y.x)%mo;z.y=(x.y+y.y)%mo;z.z=(x.z+y.z)%mo;return z; } struct Stream {inline int read(){int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;}inline void write(int x){if(x>9) write(x/10);putchar(x%10+'0');} }Std; struct Segment_Tree {data f[N<<2];inline void make(int v,int l,int r){if(l==r){f[v].x=a[l].x*a[l].x%mo;f[v].y=a[l].y*a[l].y%mo;f[v].z=a[l].x*a[l].y%mo;return;}int mid=(l+r)>>1;make(v<<1,l,mid);make(v<<1|1,mid+1,r);f[v]=f[v<<1]+f[v<<1|1];}inline void change(int v,int l,int r,int x,long long y,long long z){if(l==r){f[v].x=y*y%mo;f[v].y=z*z%mo;f[v].z=y*z%mo;return;}int mid=(l+r)>>1;if(x<=mid) change(v<<1,l,mid,x,y,z); else change(v<<1|1,mid+1,r,x,y,z);f[v]=f[v<<1]+f[v<<1|1];}inline data find(int v,int l,int r,int x,int y){if(l>=x && r<=y) return f[v];int mid=(l+r)>>1;if(y<=mid) return find(v<<1,l,mid,x,y);if(x>mid) return find(v<<1|1,mid+1,r,x,y);return find(v<<1,l,mid,x,mid)+find(v<<1|1,mid+1,r,mid+1,y);} }Tree; int main() {int n=Std.read(),m=Std.read();for(int i=1;i<=n;i++) a[i].x=Std.read(),a[i].y=Std.read();Tree.make(1,1,n);while(m--){int type=Std.read(),l=Std.read();if(type==1){long long x=Std.read(),y=Std.read();Tree.change(1,1,n,l,x,y);}else{data t=Tree.find(1,1,n,l,Std.read());Std.write((t.x*t.y%mo+mo-t.z*t.z%mo)%mo);putchar('\n');}}return 0; }

總結

以上是生活随笔為你收集整理的JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。