結果
問題 | No.259 セグメントフィッシング+ |
ユーザー |
![]() |
提出日時 | 2015-08-01 00:05:18 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,277 bytes |
コンパイル時間 | 782 ms |
コンパイル使用メモリ | 99,224 KB |
実行使用メモリ | 13,916 KB |
最終ジャッジ日時 | 2024-07-18 00:08:26 |
合計ジャッジ時間 | 4,700 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 WA * 1 |
other | WA * 1 TLE * 1 -- * 21 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:95:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 95 | scanf("%d%d", &n, &q); | ~~~~~^~~~~~~~~~~~~~~~ main.cpp:98:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 98 | scanf("%s", buf); | ~~~~~^~~~~~~~~~~ main.cpp:100:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 100 | scanf("%d%d%d", &t, &y, &z); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cctype>#include<cstdlib>#include<algorithm>#include<bitset>#include<vector>#include<list>#include<deque>#include<queue>#include<map>#include<set>#include<stack>#include<cmath>#include<sstream>#include<fstream>#include<iomanip>#include<ctime>#include<complex>#include<functional>#include<climits>#include<cassert>#include<iterator>#include<unordered_set>#include<unordered_map>using namespace std;#define MAX 200002int n;int q;char buf[3];pair<int, int> mo(long long int t, long long int ich,bool x){ //false left,true rightif (x==1){t %= (n+2);ich -= t;if (ich < 0){ich++;if (ich < 0){ich++;}x ^= 1;}ich = abs(ich);}else{t %= (n+2);ich += t;if (ich >= n){ich -= n-1;if (ich){ich--;}ich = n - 1 - ich;x ^= 1;}}return make_pair(ich, x);}struct BIT{long long int bit[MAX];BIT(){for (int i = 0; i < MAX; i++){bit[i] = 0;}}void add(int i, long long int x){i++;while (i < MAX){bit[i] += x;i += i&-i;}}long long int sum(int i){long long int r = 0;i++;while (i){r += bit[i];i -= i&-i;}return r;}long long int q(int a, int b){if (a > b){swap(a, b);}return sum(b) - sum(a - 1);}};BIT B[2];void ins(int a, int b, int c){B[b].add(a, c);}int main(){scanf("%d%d", &n, &q);while (q--){pair<int, int> kari;scanf("%s", buf);int t, y, z;scanf("%d%d%d", &t, &y, &z);if (buf[0] == 'L'){kari = mo(t, y, false);ins(kari.first, kari.second, z);continue;}if (buf[0] == 'R'){kari = mo(t, y, true);ins(kari.first, kari.second, z);continue;}long long int ans = 0;t %= (n+2);z--;for (int i = 0; i < 2; i++){pair<int, int> kari = mo(t, y, i);pair<int, int> kari2 = mo(t, z, i);if (kari.first>kari2.first){swap(kari, kari2);}if (kari.second != kari2.second){int chu = 0;if (i == 0){chu = n-1;}ans += B[kari.second].q(kari.first,chu);ans += B[kari2.second].q(chu, kari2.first);}else{ans += B[kari.second].q(kari2.first, kari.first);}}printf("%lld\n", ans);}return 0;}